Java打印程序设计(10页).doc
《Java打印程序设计(10页).doc》由会员分享,可在线阅读,更多相关《Java打印程序设计(10页).doc(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-Java打印程序设计-第 10 页Java打印程序设计nt包中。而jdk1.4新增的类则主要存在于javax.print包及其相应的子包javax.print.event和javax.print.attribute中。其中javax.print包中主要包含打印服务的相关类,而javax.print.event则包含打印事件的相关定义,javax.print.attribute则包括打印服务的可用属性列表等。2.2如何实现打印要产生一个打印,至少需要考虑两条:需要一个打印服务对象。这可通过三种方式实现:在jdk1.4之前的版本,必须要实现java.interJob的printDialog显示打
2、印对话框,然后通过print方法开始打印;在jdk1.4中则可以通过javax.print.ServiceUI的printDialog显示打印对话框,然后调用print方法开始一个打印工作。2.3打印机对话框Printable的打印对话框开始打印工作之前,可以通过PrinterJob.printDialog来显示一个打印对话框。它给用户一个机会以选择应该打印的页码范围,并可供用户改变打印设置。它是一个本地对话框。事实上,当从一个Printable对象进行一个打印工作时,打印对象并不知道需要打印多少页。它只是不停地调用print方法。只要print方法返回Printable.PAGE_EXIST
3、S值,打印工作就不停地产生打印页,直到print方法返回Printable.NO_SUCH_PAGE时,打印工作才停止。由于打印工作只有在打印完成后才进行准确的页数计算,所以在对话框上的页码范围是尚未初始化的1,9999。我们可以通过构建一个java.awt.print.Book对象传递给打印对象;也可以通过指定的格式计算需要打印的页数并传递给打印对象,使其准确地知道要打印多少页。2.3.2ServiceUI的打印对话框与Printable的对话框不同的是,在jdk1.4提供ServiceUI的打印机对话框的缺省行为已经用新的API更改了:缺省情况下对话框不显示。我们必须使用ServiceUI
4、类调用printDialog方法创建如下所示的打印对话框。3Java打印程序设计实例3.1打印文本3.1.1应用场景假设我们需要打印一个窗体的某个文本编辑域(可能只有几行,也可能包含多页)的内容,并且每页最多打印54行,如何实现呢?3.1.2解决方法基本思路如下:首先我们需要实现Printable接口,然后按照每页最多54行的格式计算共需要打印多少页,当打印文本的按钮被点击时,执行相应的打印动作。打印文本的具体操作可通过Graphics2D的drawString方法来实现。1、实现Printable接口/*Graphic指明打印的图形环境;PageFormat指明打印页格式(页面大小以点为计量
5、单位,1点为1英寸的1/72,1英寸为25.4毫米。A4纸大致为595842点);page指明页号*/ImageableX(),pf.getImageableY();/转换坐标,确定打印边界drawCurrentPageText(g2,pf,page);/打印当前页文本returnPrintable.PAGE_EXISTS;/存在打印页时,继续打印工作/*打印指定页号的具体文本内容*/privatevoiddrawCurrentPageText(Graphics2Dg2,PageFormatpf,intpage)Strings=getDrawText(printStr)page;/获取当前页的
6、待打印文本内容/获取默认字体及相应的尺寸FontRenderContextcontext=g2.getFontRenderContext();Fontf=area.getFont();StringdrawText;floatascent=16;/给定字符点阵intk,i=f.getSize(),lines=0;while(s.length()0&lines0)s=s.substring(k+1);/截取尚未打印的文本ascent+=i;else/不存在回车符lines+=1;/计算行数drawText=s;/获取每一行文本g2.drawString(drawText,0,ascent);/具体
7、打印每一行文本,同时走纸移位s=;/文本已结束/*将打印目标文本按页存放为字符串数组*/publicStringgetDrawText(Strings)StringdrawText=newStringPAGES;/根据页数初始化数组for(inti=0;i0)if(lines0)s=s.substring(k+1);elselines+=1;/行数累加/将文本内容存放到相应的数组元素drawTextsuffix=drawTextsuffix+s;s=;else/已满一页时lines=0;/行数统计清零suffix+;/数组下标加1returndrawText;2、计算需要打印的总页数publi
8、cintgetPagesCount(StringcurStr)intpage=0;intposition,count=0;Stringstr=curStr;while(str.length()0)/文本尚未计算完毕position=str.indexOf(n);/计算回车符的位置count+=1;/统计行数if(position!=-1)str=str.substring(position+1);/截取尚未计算的文本elsestr=;/文本已计算完毕if(count0)page=count/54+1;/以总行数除以54获取总页数returnpage;/返回需打印的总页数3.1、以jdk1.4以
9、前的版本实现打印动作按钮监听,并完成具体的打印操作privatevoidprintTextAction()printStr=area.getText().trim();/获取需要打印的目标文本if(printStr!=null&printStr.length()0)/当打印内容不为空时PAGES=getPagesCount(printStr);/获取打印总页数PrinterJobmyPrtJob=PrinterJob.getPrinterJob();/获取默认打印作业PageFormatpageFormat=myPrtJob.defaultPage();/获取默认打印页面格式myPrtJob.
10、setPrintable(this,pageFormat);/设置打印工作if(myPrtJob.printDialog()/显示打印对话框trymyPrtJob.print();/进行每一页的具体打印操作catch(PrinterExceptionpe)pe.printStackTrace();else/如果打印内容为空时,提示用户打印将取消JOptionPane.showConfirmDialog(null,Sorry,PrinterJobisEmpty,PrintCancelled!,Empty,JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING
11、_MESSAGE);3.2、以jdk1.4新版本提供的API实现打印动作按钮监听,并完成具体的打印操作privatevoidprintText2Action()printFlag=0;/打印标志清零printStr=area.getText().trim();/获取需要打印的目标文本if(printStr!=null&printStr.length()0)/当打印内容不为空时PAGES=getPagesCount(printStr);/获取打印总页数/指定打印输出格式DocFlavorflavor=DocFlavor.SERVICE_FORMATTED.PRINTABLE;/定位默认的打印服务
12、PrintServiceprintService=PrintServiceLookup.lookupDefaultPrintService();/创建打印作业DocPrintJobjob=printService.createPrintJob();/设置打印属性PrintRequestAttributeSetpras=newHashPrintRequestAttributeSet();DocAttributeSetdas=newHashDocAttributeSet();/指定打印内容Docdoc=newSimpleDoc(this,flavor,das);/不显示打印对话框,直接进行打印工作
13、tryjob.print(doc,pras);/进行每一页的具体打印操作catch(PrintExceptionpe)pe.printStackTrace();else/如果打印内容为空时,提示用户打印将取消JOptionPane.showConfirmDialog(null,Sorry,PrinterJobisEmpty,PrintCancelled!,Empty,JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);3.2打印预览3.2.1应用场景大多少商业应用都需要提供打印预览机制,它可以让我们在屏幕上看到页面,这样就不会因为不喜
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 打印 程序设计 10
限制150内