《Java打印程序设计.docx》由会员分享,可在线阅读,更多相关《Java打印程序设计.docx(10页珍藏版)》请在优知文库上搜索。
1、Java打印程序设计1 MeF在我的的实际I:作中,常常须要实现打印功健.但由于历史缘由,JaVa供应的打印功能始终都比拟弱.事实上般初的Jdk根本不支持打印,宜到MkI.1才引入了很轻欧的打印支持.所以.在以前用Java/AppleVJSP/SerVtet设计的程序中,较困难的打印都是通过调用ACUVeXQCX控件或者VBNC程序来实现的,特别麻烦,事实上,SUN公司也始终致力于JaVa打卬功能的完善,而Java2平台那么用绻行r一个强他的打印模式的开端,该打印模式以Java2D图形包充分结合成体,更令人蚁招的是,新发布的jdk1.4那么供应了套完整的“Java打印效劳APr(JaVaPri
2、ntSerViCeAPI),它对已有的打印功能是主动的补充.利用它,我们可以实现大局部实际应用再求,包括打印文字、图形、文件及打印预览等等。本文将通过一个详细的程序实例率说明如何设计JaVa打印程序以实现这些功能.并对不同版本的实现方法进展分析比拟.吊电大家能从中获得一些有益的提示.2 Java中的打印2.1 Java的打印APlJava的打印API主要存在包中.而jdk1.4新增的类那么主要在在于javax.print包及其相应的子包和中.共中Javaxpnnt包中主要包含打FlJ效劳的相关类,而那么包含打印事务的相关定义.那么包括打印效劳的可用解性列表等.22如何实现打印要产生个打印,至少
3、很要考虑两条:殖吃个打印效劳对象.这可通过三种方式实现I在Wkl.4之前的版本,必须要坡现接1.l或潮过TOOh1.getDefaUltToOlkiH).gelPnnUob来茨将打印效劳对象:在jdk1.4中那么可以通过来ft找定位个打印效劳时型.须要开场一个打卬工作.这也有儿种实现方法:在jdk1.4之前可以通过java.awt.print.PrintJob(jdk1.1供应的,现在1.l经很少用Tj调用Print或PrintAll方法开场打印工作:也可以通过的PrintDiaIOg显示打印对话框.然后通过Pdnl方法开场打印:在jdk1.4中那么可以通过的PnntDiaIog显示打印对话框
4、,然后谡用Pnnt疗法开场个打印工作.2.3打印机对话柢Printable的打印对话框开场打印工作之前,可以通过PrinterJobprintDiaIog来显示一个打印对话框,它给用户一个时机以选择应当打印的页码范用,弁可供用户变更打印设置.它是一个本地对话框.于实上,当从一个PrintabIe对象进展一个打印工作时,打卬对象并不知道须要打印多少页.它只是不停地商用print方法,只要Prin方法返回Printable.PAGE-EISTS值.打印工作就不停地产生打印页,直到Pnnl方法返回PnntabIe.NO_SUCH_PAGE时.打印I:作才停侬.由于打印工作只有在打印完成后才进屣精确的
5、页数计鸵,所以在对话框上的页码范国是尚未初始化的1,9999我仃可以通过构建个对望传递给打印对敞:也可以通过指定的格式让仇须要打印的页数并传递给打印对象使其精确地知道要打印多少页.2 3.2ServiceUI的打印对话框与Printable的对话极不同的是,.jdk1.4供应ServiceUI的打印机对话板的然省行为已经用新的API更改了:籍有状况下对话框不显示,我归必需运用ServiceUI类调用PrintDiaJog方法创立如卜,所示的打印对话框.3 JaVa打印程序设计实例3.1 打卬文本3.1.1 应用场景假设我们须要打印个窗体的某个文本编辑域(可能只有几行,也可能包含多页)的内容,并
6、且俗页公多打卬54行,如何实现嗯?312诉决方法根木思路如下:首先我们须要实现PrintabIe接口,然后依据彩页G多54行的格式计。共须要打印多少页,当打印文本的按钿被点击时,执行相应的打FlJ动作.打印文本的详细操作可通过Graphics2D的drawString方法来实现.1.实HePrintabIe接1.JrGraphic指明打印的图形环境:PageFormat指明打印页格熄页面大小以点为计量单位,1点为1英寸的1/72,1英寸为25.4亳米,A4尔大致为595842点):page指明页号Vpublicintprint(Grapicsg,PageFormatpf.intpage)thr
7、owsPrinterExceptionGrapics2Dg2=(Graphics2D)g;g2.setPaint(Colorblack);设置打印色为黑色if(page=PAGES)当打印页号大于须瞿打印的总页数时,打印工作完毕returnPrintable.NO_SUCH_PAGE;g2.tra11slate(pf.getlmageableX(),PtgetlmageabIeY();转换坐标.瑜定打印边界drawCuentPageTet(g2.pf.Page打印当前页文本returnPrintable.PAGE_EXISTS;存在打卬页时,接着打印工作)广打印指定页号的详细文本内容/priv
8、atevoiddrawCurrentPageTet(Graphics2Dg2.PageFormatpf,intpage)Strings=getDrawText(prinlSlr)pagM:狭得苜前页的待打印文本内容狭得默认字体及相应的尺寸FontRenderContextntext=g2.getFontRenderConteXt();Fontf=area,getFont();StringdrawText;floatascent=16:给定字符点阵intk,i=f.getSize()1lines=0;while(s.ength()0&linesg(O.k):狭尔班行文本g2.drawString
9、(drawTet.O.ascent);详细打印板一行文木.同时走纸移位if(SSUbString(k+1),length()0)s=s.substring(k1);敌取尚未打印的文本ascent+=i;else不存在回车符(lines+=1;计犯行数drawTet=s;获得征行文本g2.drawStrig(drawTextO.agent);详细打印每一行文本.同时走纸移位s=-;文本己完毕)广将打卬目标文木按页存放为字符率publicStringgetDrawTet(Strings)(Stnng(drawText=newStringPAGES;依抠页数初始化数组for(inti=0;i0)(i
10、f(linesO)s=s.substring(k+1);)else(lines+=1;/行数我加“格文本内容存放到相应的数加元素drawTet(suffi=drawTextsuffixs;s=:)else己淌-JiiBj(lines=0;行数统计清零SUffiX+;故抓下标加1)returndrawText;2,计算须要打印的总页数publicintgetPagesCont(StringcurStr)(intpage=0;intposition,count=0;Stringstr=curStr;w网StrIengthO0)“文本尚未计算完毕(position=str.indexf(n);计同乍
11、符的位置count=1;统计行数if(positionI=-1)str=slr.substring(postion+1);截取尚未计算的文本elsestr=”;文木己计尊完毕)if(ut0)page=count/54+1;以总行数除以54获得总页数returnpage;返同管打印的总页数3.1、 以jdk1.4以前的版本实现打印动作按钿监听.并完成详细的打印操作privatevoidprintTextAction()PrintStr=area.ge11xt().lnm():获得双要fjFIJ的11标文本if(printStr=null&pnntStr.lenglh()O)当打FlJ内容不为空时
12、(PAGES=getPagesCont(printStrj;获得打卬总页数PnnterJobmyPrUob=P11nterJob.gtPnntrJob();我得默认打印作业PageFormatPageFOrmal=myPrtJob.defaultPage();茨得以认打印页面格式myPrtJobsetPrintable(this,pageFormat);设翼打El)工作if(myPrUob.printDDtog()显示打印对话框(trymyPrtJob.print();进展捋页的详细打印操作)CatCh(PrinterEXCePtiOnpe)p.pnntStackTrac();)else假如打
13、印内容为空时,提示用户打印将取消JOptionPane.showConfirmDialog(null,Sorry,PrinterJobisEmpty,PrintCancelled!,Empt/.JoPtiOnPaneQEFAU1.T_OPTION,JOPtionPane.WARNING.MESSAGE);)3.2、 以JdkI.4新版本供应的APl实现打印动作按钮监听.并完成详细的打FlJ悚作privatevoidprintText2Action()PrintFIag=0:打印标记清零PrintStr=area.ge11xl().trim()力获得次要打印的目标文本if(printStr!=n
14、ull&pri11tStr.le11gth()0)当打印内容不为空时(PAGES=getPagesCont(printStr):获得打卬总页数指定打印输出格式DocFIavorflavor=DocFlavorSERVICE-FORMATTED-PRlNTAB1.E;“定位默认的打卬效劳PrintServiceprintservice=PrintSerViCe1.OokUPjoOkUPDefaUitPrintSerViCe();创立打印作业DocPrintJobjob=prin(Service.createPrinUob);设跟打卬磁性PrintReqUestAttributeSetpras=newHashRrintRequestAttributeSetO;DocAttributeS