📄 在java中轻松打印文档__天极yesky3.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_2.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中轻松打印文档__天极Yesky3.files/y_newcontent.css" type=text/css
rel=stylesheet>
<SCRIPT language=JavaScript
src="在Java中轻松打印文档__天极Yesky3.files/newcontentjs.js"></SCRIPT>
</HEAD>
<BODY><!--头部-->
<SCRIPT src="在Java中轻松打印文档__天极Yesky3.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>了解DocumentRenderer</B><BR><BR> DocumentRenderer用于执行显示一个打印对话框并通过使用在Java
Swing Printing
API中可用的标准化工具开始打印操作。由于在使用这个DocumentRenderer类时无需完全了解这个API,而且该API已经在很多地方被详细描述过,因此这里我们就不再介绍它了。这个用于DocumentRenderer类的源代码中还包括了这个打印逻辑的完整文档。
<P></P>
<P> 然而我们或许应该解释一下DocumentRenderer用来在单独打印页面中定位文本的过程,以便你了解这个类所提供的改进功能,这会帮你回顾这个Java打印过程通常遵循的显示文档的逻辑。
</P>
<P> 文档通常是以一种简单的方式进行打印的。首先,文档会被放入JEditorPane。你可以将打印过程想象为在JEditorPane
的上面放置一个矩形框(其大小和页面打印区的大小相等),并对其中的内容进行打印而无需关心外面的部分。</P>
<P> 这个矩形的上沿与JEditorPane
顶部齐平,矩形框内部的区域会被绘制(paint)。如果矩形的下沿穿过文本,不用去管它;字符会在打印页面的底部被分开。打印第二页时,矩形的上沿被向下移至前面被下沿所占据的那一行,该过程被重复执行。由于第二页正好在第一页结束的地方开始,因此在第一页底部被分开的字符会出现在第二页的顶部。后面几页也是一样。</P>
<P> 为了避免从行中断开,DocumentRenderer会仔细检侧文档以测定是否一个单独文本和页面完整契合。这样会比只是在JEditorPane中放一个矩形框并打印其中内容的效果更佳。
</P>
<P> <B>绘制视图(View)</B><BR><BR> 如果将JEditorPane看作仅包含了一个文档的方法,你就不能测定所有文本的位置或大小了。一个文档对于这个任务来说太大了,文档或许会契合于一个单一页面,或许不会。为了使文档能够完整契合于打印纸,你必须将它分成一些小的部分以便对每个部分的位置进行检测。</P>
<P> 幸运的是,Java Swing Text
Package提供了一个View类,它能使你将文档分成单一的、适于绘制的部分。你可以将JEditorPane想象成是由几个视图部分组成的;现在你就可以完全基于这些小部分的大小和位置来打印文档了。</P>
<P> View类的子类用于处理可视性组件(visual
component)中的显示和打印文本的任务。然而,处理打印文本的许多程序员没有意识到的是视图可以在显示到纸上时提供这些相同的功能。尽管对视图问题进行详细讨论是本文以外的话题,但在讨论文档打印时对它有一个大致的了解还是很有必要的。</P>
<P> 在Swing中,视图被当作处理文本显示的容器。在树型目录中一个根视图可以有多个视图分支。在这些分支的端部会显示代表真实文本的叶视图(leaf
view)。</P>
<P> 将这个视图的树型结构当作一个由单一的、大的、包含整个文本的视图来考虑。这个文档视图被分成几个段落视图,它被依次分成几个单独的行。尽管真实工作中的视图情况要比这个简单的描述复杂的多,但该例子中显示了如何通过视图来将一个文档分成契合于打印纸的小的部分。通过查看每一行,你可以测定它是否完全契合于打印纸而不会在底部被分开。如果行数契合,就执行打印,如果不契合,则将它记录下来以便在下一页中执行打印。</P>
<P> 包含在JEditorPane中的视图采取了一种和在JPanel中的组件行为相类似的操作。一个主要区别在于视图不要求布局管理器(layout
managers)来进行位置处理;它们会自己参与布局。这样一来,在JEditorPane中的视图就会象一个真实的组件和布局管理器一样进行操作。视图知道如何查看、如何绘制自己以及在哪里显示其子文档。</P>
<P> 视图并不是被直接建立的。更确切地说,它们是由ViewFactory子类的工厂(factory)来生成的。一个ViewFactory生成一个文档并将它们分成根视图以及所需的分支视图和叶视图。工厂会按照这种方式来处理这些乏味的解析文档和计算布局的工作。</P>
<P> 你很少能够直接和这些工厂打交道。对很多部分来说,它们是被自动调用的。在JEditorPane中设置文档并调用JEditorPane.validate()方法来将文档发送的适合的工厂中,该工厂则会返回所需的视图。然后这些视图会被用在组件的布局上。</P>
<P></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_1.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><FONT
color=#666666><B>3</B></FONT></A> <A class=page
href="http://www.yesky.com/237/1709237_3.shtml" target=_self><B>4</B></A> <A
class=page href="http://www.yesky.com/237/1709237_3.shtml" target=_self><FONT
face=Webdings>8</FONT></A> <A class=page
href="http://www.yesky.com/237/1709237_3.shtml" target=_self><FONT
face=Webdings>:</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中轻松打印文档__天极Yesky3.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中轻松打印文档__天极Yesky3.files/y_newcontent27.gif"></DIV>
<DIV class=right><IMG
src="在Java中轻松打印文档__天极Yesky3.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">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -