java swing打印预览_Atitit.java swing打印功能 api  attilax总结

本文总结了Java Swing的打印功能,包括三种打印方式:直接调用javascript的window.print(),自定义HTML格式打印,以及通过Word模板装载数据打印。重点介绍了Java PrintService API的使用,包括创建PrintJob、设置Printable、获取打印机列表等,并提供了代码示例。

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

Atitit.java swing打印功能api  attilax总结

1.打印方式有三种:

1.1.一是不经过任何修改,直接调用javascript中的window.print()打印。

1.2.二根据客户要求的报表格式,编写相应格式的html,装载数据打印,同样调用window.print()打印,只是对html的格式要求比较高。

1.3.三是通过客户提供的word格式,通过xml配置文件与数据库的数据进行关联,自动装载数据到word中打印,这里是利用客户端的word进行打印。

1.4.使用lang api

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源:http://www.cnblogs.com/attilax/

第一种几乎不用编写程序,最简单快捷,这里会遇到几个问题,只能打印表单内容,按钮不希望打印出来;页眉页脚不想打印出来;IE的titile不想打印出来。

解决办法:把button放在一个table或者div里,打印的时候隐藏,完成后显示就可以。系统中的javascript打印代码如下:

第三种方案利用word强大的排版、打印功能,把排版和打印的需求扔到word中,OA软件要做的仅仅是让数据导到word中去。JAVA读取WORD模板,通过XML读取相关的数据库数据,自动转载数据到WORD模板中,最终展现给客户打印的是WORD。

完成此方案后,有几个特点:打印格式由现有的word格式提供,不需要再花时间开发调试程序;实施人员只需要花一点时间就完成标签和XML文件的设置;在报表中自动加入审批意见,领导印章等,直观跟现实一致;打印的格式和效果完全由word决定,而word强大并且被大众而熟悉,在打印的时候可以调整,所见即所得!小结:这几种方案不仅仅应用于OA的打印,任何web系统CRM、ERP、HR等打印都可以处理。而且也不仅仅是java打印、jsp打印,用PHP、ASP等语言开发的WEB打印也一样适用。这几种打印方案广泛应用,特别是第三种,有效解决了政务OA的红头文件,此文仅做思路的总结,具体实现方法有很多。

2.打印模式单页模式与多页模式

3.虚拟打印测试

直接打印的时候,会弹出存为pdf文件。。。

貌似win7 PDF-XChange Printer 2012

4.Java 打印api

4.1.通过PrinterJob接口( 不推荐@depeart)

比如,这两种机制使用java.awt.Graphics这个类的一个接口来展现打印内容,意味着所有要打印的东西都必须用一张图片表示。另外,完善的PrinterJob提供了很有限的工程相关属性的设置;这两种机制都没有办法通过程序来选择目标打印机。

PrintService内部也是使用PrintService

4.2.通过PrintService(推荐)

Java打印最大的改变来自于J2SE的发布带来的Java打印服务API。这个第三代Java打印支持接口突破了先前提到的使用javax.print包的PrintService和DocPrintJob接口的局限性。因为新的API就是以前两种旧的打印机制定义的功能函数的一个父集,它是目前我们常用的方法并且是这篇文章的焦点。

更深入来说,以下的步骤包含了怎么使用这个新的Java打印服务API:

1.定义打印机,限制那些返回到提供你要实现功能的函数的列表。打印服务实现了PrintService接口.

2.通过调用接口中定义的createPrintJob()方法创建一个打印事件,作为DocPrintJob的一个实例。

3.创建一个实现Doc接口的类来描述你想要打印的数据,你也可以创建一个PrintRequestAttributeSet的实例来定义你想要的打印选项。

4.通过DocPrintJob接口定义的printv()方法来初始化打印,指定你先前创建的Doc,指定PrintRequestAttributeSet或者设为空值。

现在你可以检查每一步并且试着完成它们。

5.Java jpos 打印框架

参考

jpos_examples_图文_百度文库.htm

5.1.Ati print ----DevicePrinterPrinter

6.Code  实现打印GraphicsdrawImagedrawString

importjava.awt.print.PrinterJob;

1.Image src = Toolkit.getDefaultToolkit().getImage("D:\\EclipseWorkSpace3.1\\Kfc-wuxi\\WebRoot\\image\\KFC.jpg");

1.drawImage

1.Graphics g) {

2.if(paintable) {

3.g.setColor(Color.GRAY);

4.g.drawString

6.1.PrinterJob。setPrintable

//获取打印服务对象

PrinterJobjob=  PrinterJob.getPrinterJob();

//     PageFormat  pageFormat  =  job.defaultPage();//得到默认页格式

job.setPrintable(newPrintTest1());//设置打印类

6.2.PrinterJob.setPageable

//------------------add page and format

//        设置成竖打

PageFormatpf=newPageFormat();

pf.setOrientation(PageFormat.PORTRAIT);

//        通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。

Paperp=newPaper();

p.setSize(590,840);//纸张大小

p.setImageableArea(10,10,  590,840);//A4(595  X  842)设置打印区域,其实0,0应该是72,72,因为A4纸的默认X,Y边距是72

pf.setPaper(p);

//        把  PageFormat  和  Printable  添加到书中,组成一个页面

//        通俗理解就是书、文档

Bookbook=newBook();

book.append(newPrintTest(),pf);

//获取打印服务对象

PrinterJobjob=  PrinterJob.getPrinterJob();

//  设置打印类

job.setPageable(book);

7.获取打印机列表

packagecom.openbravo.pos.util;

importjavax.print.DocFlavor;

importjavax.print.DocFlavor.SERVICE_FORMATTED;

importjavax.print.PrintService;

importjavax.print.PrintServiceLookup;

publicclassReportUtils

publicstaticString[] getPrintNames()

{

PrintService[]arrayOfPrintService= PrintServiceLookup.lookupPrintServices(DocFlavor.SERVICE_FORMATTED.PRINTABLE,null);

String[]arrayOfString=newString[arrayOfPrintService.length];

for(inti= 0;i

arrayOfString[i] =arrayOfPrintService[i].getName();

returnarrayOfString;

}

8.使用指定打印机打印

接口 PrintService是DocPrintJob的工厂。PrintService描述了打印机的功能,并可查询它来了解打印机支持的属性。

示例:

DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;

PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();

aset.add(MediaSizeName.ISO_A4);

PrintService[] pservices =

PrintServiceLookup.lookupPrintServices(flavor, aset);

if (pservices.length > 0) {

DocPrintJob pj = pservices[0].createPrintJob();

try {

FileInputStream fis = new FileInputStream("test.ps");

Doc doc = new SimpleDoc(fis, flavor, null);

pj.print(doc, aset);

} catch (FileNotFoundException fe) {

} catch (PrintException e) {

}

}

9.参考

Java web 打印方案- tanksyg的专栏-博客频道- CSDN.NET.htm

Java打印-Print Swing component - dontsan - ITeye技术网站.htm

(impt)打印--学习如何使用打印服务api.htm

Java高级编程 使用打印服务API一(图) - 3P代码.htm

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值