📄 在java中轻松打印文档__天极yesky4.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0040)http://www.yesky.com/237/1709237_3.shtml -->
<HTML lang=zh-CN xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>在Java中轻松打印文档__天极Yesky</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META http-equiv=Content-Language content=zh-CN>
<META content=all name=robots>
<META content="index, follow" name=googlebot>
<META content="MSHTML 6.00.2800.1561" name=GENERATOR>
<META content="天极Yesky | 全球中文IT第一门户" name=author>
<META content="天极Yesky | 全球中文IT第一门户" name=Copyright>
<META
content=Java,在Java中轻松打印文档,本文就将介绍这样一个对象――DocumentRenderer,它将一个文档作为方法中的一个参数并处理指定任务来完成打印,在Java中轻松打印文档
name=description></META>
<META content=Java,硬件,软件,数码,游戏,e时代,下载,社区,评测,笔记本; name=keywords><LINK media=all
href="在Java中轻松打印文档__天极Yesky4.files/y_newcontent.css" type=text/css
rel=stylesheet>
<SCRIPT language=JavaScript
src="在Java中轻松打印文档__天极Yesky4.files/newcontentjs.js"></SCRIPT>
</HEAD>
<BODY><!--头部-->
<SCRIPT src="在Java中轻松打印文档__天极Yesky4.files/y_newcontenthead_0608.js"></SCRIPT>
<!--当前位置开始-->
<DIV id=currentposition><SPAN>您现在的位置: <A
href="http://www.yesky.com/">天极Yesky</A> > <A
href="http://soft.yesky.com/">软件</A> > <A
href="http://dev.yesky.com/">开发者网络</A> </SPAN><SPAN
style="PADDING-LEFT: 240px"><SPAN id=ad2></SPAN></SPAN></DIV><!--当前位置结束--><!--正文开始-->
<DIV id=contentarea><!--左部开始-->
<DIV id=contentleft><!--左部的右部开始-->
<DIV id=contentright1><!--文章内容开始-->
<DIV class="left fontsize2">在Java中轻松打印文档</DIV>
<DIV class=fontclear></DIV><BR>
<DIV class=left><SPAN class=span>作者:sadly</SPAN><SPAN
class=span>出处:论坛</SPAN><SPAN class=span>责任编辑:<A title=向本编辑提问
href="http://comments.yesky.com/t/·½ÖÛ/6,324/1709237.shtml"> 方舟 </A></SPAN><SPAN
class=span>[ 2003-06-20 12:39 ]</SPAN></DIV>
<DIV class=fontclear></DIV>
<DIV
class="left fontsize3">本文就将介绍这样一个对象――DocumentRenderer,它将一个文档作为方法中的一个参数并处理指定任务来完成打印</DIV>
<DIV class=fontclear></DIV>
<HR class=hr1>
<CENTER><SPAN id=ad9></SPAN></CENTER>
<DIV class="left fontsize4">
<DIV class=guanggao><SPAN id=ad3></SPAN></DIV>
<DIV class=guanggao><SPAN
id=contentAdv></SPAN></DIV> <B>打印视图</B><BR><BR> DocumentRenderer类能够将需要打印的文档放入jeditorPane中,它是JEditorPane的一个实例。jeditorPane的宽度决定了打印页面的大小而且它会调用一个验证方法来执行布局。DocumentRenderer不会显示这个JEditorPane,因此屏幕显示不会生效。需要被打印的根视图是通过一个有点复杂的jeditorPane用户界面调用来获得的:<BR>
<P></P>
<TABLE cellPadding=0 width="100%" bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD>View rootView
=jeditorPane.getUI().getRootView(jeditorPane);</TD></TR></TBODY></TABLE>
<P> 这个rootView及其子视图可能会对所需信息进行查询以便对打印文档进行布局。这些视图在每部分文本的绘制环境(graphical
context)中提供了坐标和大小。通过这些信息你就能够测定这部分文本是否和打印页面相契合。如果契合,则DocumentRenderer将执行打印;如果不契合,该类将对这个用来打印这部分文本而不将其分开的分页符进行测定。</P>
<P> 由于视图知道如何自行绘制,因此你无需自己设置字体或颜色。DocumentRenderer以多种字体和颜色通过调用一个简单视图的paint方法来处理式样文本(styled
text)。</P>
<P> 然而这个视图的树型结构也存在一个问题。你不能确定在一个代表打印文本的叶视图结束之前分支视图从根视图中被分出了几次。你可以通过使用DocumentRenderer
类中的一个简单的循环方法来解决这个问题。</P>
<P> printView方法循环经过视图的分支结构来查找可打印的叶视图。这种方法将一个视图作为其中一个参数。它从根视图开始对每个视图进行检查以测定它是否有相关的子视图。如果有,则printView会依次调用每个子视图将其作为其视图参数。这样一来,这个方法最终会运行至整个树型结构。当该方法发现一个不带子视图的叶视图时,它会在用于打印的绘制环境中检测它的位置。这个方法只用于绘制那些完全契合于该环境的可打印部分的叶视图。当一个叶视图分跨(straddle)页面的底部时,这个方法就会记录该页面上沿的位置以便使下一页从这个位置开始。因此分页符就不会从文本的行当中断开了。</P>
<P> 如果你想要更深入地了解打印视图的用法,你可以查找DocumentRenderer类的源代码。我们对它进行了注释讲解。由于它只有不到200行的代码,因此我们有充足的时间来给它加上注释。</P>
<P> <B>该类的局限</B><BR><BR> 我们在Java SDK
1.3和1.4版本中对DocumentRenderer进行过测试,尽管它应该是适用于实现Swing的所有Java版本的。DocumentRenderer是通过标准的Java技术来运行的,因此它不能实现比Java本身更好或更糟的文本绘制。在JEditorPane中不能显示的字符也将无法显示在纸上。
</P>
<P> Java在Windows环境下对文本进行测定时有一个小问题。由于文本没有被精确地测定,一些位置可能有些偏离。由于这些错误很小所以通常不是什么大问题,但它会在对文本右对齐(right-justified
)时变得很麻烦。因此,要尽量避免使用右对齐方式。DocumentRenderer类不会产生这个问题,它似乎也不会出现在Linux环境中。</P>
<P> 最后要说的是,大图标是不能被打印出来的。在Java中不能将它们显示在页面中,但小图标是没有问题的。</P>
<P> 在Java中执行打印不再会是一个复杂的问题了。只需简单地写两行代码并通过DocumentRenderer类来将高级的文本打印功能添加到你的程序中可以了。</P>
<P></P>
<P> <A
href="http://download.yesky.com/servlet/mydown.yeskydown?tag=4&objID=88963"
target=_blank>下载本文源代码</A><BR></P>
<DIV class=right>共4页。 <A class=page
href="http://www.yesky.com/237/1709237.shtml" target=_self><FONT
face=Webdings>9</FONT></A> <A class=page
href="http://www.yesky.com/237/1709237_2.shtml" target=_self><FONT
face=Webdings>7</FONT></A> <A class=page
href="http://www.yesky.com/237/1709237.shtml" target=_self><B>1</B></A> <A
class=page href="http://www.yesky.com/237/1709237_1.shtml"
target=_self><B>2</B></A> <A class=page
href="http://www.yesky.com/237/1709237_2.shtml" target=_self><B>3</B></A> <A
class=page href="http://www.yesky.com/237/1709237_3.shtml" target=_self><FONT
color=#666666><B>4</B></FONT></A></DIV></DIV>
<DIV class=fontclear></DIV>
<HR class=hr1>
<DIV class=left><SPAN id=ad7></SPAN></DIV>
<DIV class=fontclear></DIV>
<HR class=hr1>
<!--文章内容结束--><!--文章评论开始--><A name=tlwb></A>
<SCRIPT language=JavaScript>
<!--
var aid = 1709237;
var channelid = 324;
var tagname = "Java";
//-->
</SCRIPT>
<DIV class=photobox id=Layer11><A name=plpl></A>
<SCRIPT src="在Java中轻松打印文档__天极Yesky4.files/comments.js"></SCRIPT>
</DIV><SPAN id=commentsSpanText></SPAN>
<SCRIPT language=javascript><!--if(typeof(aid) != "undefined") { document.write("<script language=\"JavaScript\" charset=\"gb2312\" src=\"http://comments.yesky.com/articlereplies/6/"+(aid%5000)+"/"+aid+".js\"><\/script>"); }//--></SCRIPT>
<DIV class=left>
<DIV class=left><IMG
src="在Java中轻松打印文档__天极Yesky4.files/y_newcontent27.gif"></DIV>
<DIV class=right><IMG
src="在Java中轻松打印文档__天极Yesky4.files/y_newcontent28.gif"></DIV></DIV>
<DIV class=fontclear style="HEIGHT: 5px"></DIV><!--文章评论结束--><!--相关厂商开始--><A
name=xgcs></A><!-- Error --><!--相关厂商结束--><!--相关产品开始--><A name=xgcp></A><!-- Error --><!--相关产品结束--><!--文字广告开始-->
<DIV id=adendtext><SPAN id=ad8></SPAN></DIV><!--文字广告结束--><!--最新更新等内容开始--><A
name=xgwz></A>
<DIV class=photobg1>
<DIV class=newarticle1 id=Layer2-2>相关文章</DIV>
<DIV class=newarticle2 id=Layer2-2-1 style="DISPLAY: none; CURSOR: hand"
onclick="MM_showHideLayers('Layer1','','show','Layer2-2','','show','Layer3-3-1','','show','Layer1-1-1','','show','Layer4-4-1','','show','Layer5-5-1','','show','Layer3','','hide','Layer2','','hide','Layer4','','hide','Layer5','','hide','Layer3-3','','hide','Layer1-1','','hide','Layer4-4','','hide','Layer5-5','','hide','Layer2-2-1','','hide')">相关文章</DIV>
<DIV class=newarticle2 id=Layer1-1-1 style="CURSOR: hand"
onclick="MM_showHideLayers('Layer2','','show','Layer1-1','','show','Layer3-3-1','','show','Layer2-2-1','','show','Layer4-4-1','','show','Layer5-5-1','','show','Layer3','','hide','Layer1','','hide','Layer4','','hide','Layer5','','hide','Layer3-3','','hide','Layer2-2','','hide','Layer4-4','','hide','Layer5-5','','hide','Layer1-1-1','','hide')">最新更新</DIV>
<DIV class=newarticle1 id=Layer1-1 style="DISPLAY: none">最新更新</DIV>
<DIV class=newarticle2 id=Layer3-3-1 title=此文章的读者还看了以下文章 style="CURSOR: hand"
onclick="MM_showHideLayers('Layer3','','show','Layer3-3','','show','Layer1-1-1','','show','Layer2-2-1','','show','Layer4-4-1','','show','Layer5-5-1','','show','Layer1','','hide','Layer2','','hide','Layer4','','hide','Layer5','','hide','Layer1-1','','hide','Layer2-2','','hide','Layer4-4','','hide','Layer5-5','','hide','Layer3-3-1','','hide')">继续阅读</DIV>
<DIV class=newarticle1 id=Layer3-3 title=此文章的读者还看了以下文章
style="DISPLAY: none">继续阅读</DIV>
<DIV class=newarticle2 id=Layer4-4-1 title="本文编辑 方舟 的其他文章" style="CURSOR: hand"
onclick="MM_showHideLayers('Layer4','','show','Layer4-4','','show','Layer1-1-1','','show','Layer2-2-1','','show','Layer3-3-1','','show','Layer5-5-1','','show','Layer1','','hide','Layer2','','hide','Layer3','','hide','Layer5','','hide','Layer1-1','','hide','Layer2-2','','hide','Layer3-3','','hide','Layer5-5','','hide','Layer4-4-1','','hide')">编辑新作</DIV>
<DIV class=newarticle1 id=Layer4-4 title="本文编辑 方舟 的其他文章"
style="DISPLAY: none">编辑新作</DIV>
<DIV class=newarticle2 id=Layer5-5-1 title=阅读排行 style="CURSOR: hand"
onclick="MM_showHideLayers('Layer5','','show','Layer5-5','','show','Layer1-1-1','','show','Layer2-2-1','','show','Layer3-3-1','','show','Layer4-4-1','','show','Layer1','','hide','Layer2','','hide','Layer3','','hide','Layer4','','hide','Layer1-1','','hide','Layer2-2','','hide','Layer3-3','','hide','Layer4-4','','hide','Layer5-5-1','','hide')">热点文章</DIV>
<DIV class=newarticle1 id=Layer5-5 title=阅读排行
style="DISPLAY: none">热点文章</DIV></DIV>
<DIV class=photobox id=Layer1>
<DIV class=photocolorblock></DIV>
<DIV class=fontclear></DIV>
<DIV class=newarticlebox>
<UL>
<LI><A
href="http://www.yesky.com/40/1704040.shtml">《东方影都2003》媒体工具测试</A>(2003-05-29
16:25)
<LI><A
href="http://www.yesky.com/458/1704458.shtml">优化JAVA性能的几种方法</A>(2003-06-05
00:00)
<LI><A
href="http://www.yesky.com/459/1704459.shtml">Java技术实现数据库应用系统慨述</A>(2003-06-04
00:00)
<LI><A href="http://www.yesky.com/462/1704462.shtml">深入理解Collections
API</A>(2003-06-06 00:00)
<LI><A
href="http://www.yesky.com/10/1706010.shtml">通过Java套接字传递对象</A>(2003-06-13
11:23)
<LI><A
href="http://www.yesky.com/11/1706011.shtml">正则表达式和Java编程语言</A>(2003-06-12
15:42)
<LI><A href="http://www.yesky.com/14/1706014.shtml">使用Java
API压缩和解压缩数据</A>(2003-06-16 09:16)
<LI><A
href="http://www.yesky.com/18/1706018.shtml">用RMI和CORBA进行分布式Java编程</A>(2003-06-17
15:18)
<LI><A
href="http://www.yesky.com/428/1706928.shtml">正则表达式和Java编程语言</A>(2003-06-11
14:40)
<LI><A
href="http://www.yesky.com/397/1707397.shtml">用Java实现PDF报表</A>(2003-06-12
15:05)
<LI><A href="http://www.yesky.com/443/1711443.shtml">Java游戏编程初步</A>(2003-07-01
17:54)
<LI><A
href="http://www.yesky.com/195/1711695.shtml">Java平台上的CRM系统</A>(2003-07-02
16:41)
<LI><A href="http://www.yesky.com/382/1712382.shtml">Java Swing
组件全演示</A>(2003-07-07 13:11)
<LI><A
href="http://www.yesky.com/202/1712702.shtml">在Word和WPS中打印反字</A>(2003-07-08
16:05)
<LI><A
href="http://www.yesky.com/114/1714114.shtml">Java开发中的线程安全选择与Swing</A>(2003-07-14
18:00)
<LI><A
href="http://www.yesky.com/163/1714663.shtml">Java布局管理器在现实工程中的应用</A>(2003-07-16
14:06) </LI></UL></DIV>
<DIV class=fontclear></DIV></DIV>
<DIV class=photobox id=Layer2 style="DISPLAY: none">
<DIV class=photocolorblock></DIV>
<DIV class=fontclear></DIV>
<DIV class=newarticlebox>
<UL>
<LI><A href="http://diy.yesky.com/25/3037525.shtml">AMD推出DTX规格 打造轻巧型PC新标准</A>
<LI><A
href="http://digital.yesky.com/1/3037501.shtml">四大绝技傍身,朗科A150成车载MP3年底热推产品!</A>
<LI><A href="http://diy.yesky.com/input/0/3037500.shtml">发烧推荐:创新Fatal1ty
1010明星设计</A>
<LI><A href="http://notebook.yesky.com/498/3037498.shtml">再提性价比 宏基 Aspire
5583跌至8k售</A>
<LI><A href="http://sh.yesky.com/497/3037497.shtml">上海星光相机文化节开幕 新光影像网上线</A>
</LI></UL></DIV>
<DIV class=fontclear></DIV></DIV>
<DIV class=photobox id=Layer3 style="DISPLAY: none">
<DIV class=photocolorblock></DIV>
<DIV class=fontclear></DIV>
<DIV class=newarticlebox>
<UL>
<LI><A href="http://diy.yesky.com/monitor/482/2696982.shtml">宽屏继续普及
明基22英寸FP222W售价破3K</A> </LI></UL></DIV>
<DIV class=fontclear></DIV></DIV>
<DIV class=photobox id=Layer4 style="DISPLAY: none">
<DIV class=photocolorblock></DIV>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -