Atitit.java swing打印功能 api attilax总结
1.1. 一是不经过任何修改,直接调用javascript中的window.print()打印。2
1.2. 二根据客户要求的报表格式,编写相应格式的html,装载数据打印,同样调用window.print()打印,只是对html的格式要求比较高。2
1.3. 三是通过客户提供的word格式,通过xml配置文件与数据库的数据进行关联,自动装载数据到word中打印,这里是利用客户端的word进行打印。 2
4.1. 通过PrinterJob接口 ( 不推荐@depeart)4
5.1. Ati print ----DevicePrinterPrinter5
6. Code 实现打印Graphics drawImage drawString5
6.1. PrinterJob 。setPrintable6
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://blog.csdn.net/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 实现打印Graphics drawImage drawString
import java.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
//获取打印服务对象
PrinterJob job = PrinterJob.getPrinterJob();
// PageFormat pageFormat = job.defaultPage();//得到默认页格式
job.setPrintable(new PrintTest1());//设置打印类
6.2. PrinterJob .setPageable
//------------------add page and format
// 设置成竖打
PageFormat pf = new PageFormat();
pf.setOrientation(PageFormat.PORTRAIT);
// 通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。
Paper p = new Paper();
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 添加到书中,组成一个页面
// 通俗理解就是书、文档
Book book = new Book();
book.append(new PrintTest(), pf);
//获取打印服务对象
PrinterJob job = PrinterJob.getPrinterJob();
// 设置打印类
job.setPageable(book);
7. 获取打印机列表
package com.openbravo.pos.util;
import javax.print.DocFlavor;
import javax.print.DocFlavor.SERVICE_FORMATTED;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
public class ReportUtils
public static String[] getPrintNames()
{
PrintService[] arrayOfPrintService = PrintServiceLookup.lookupPrintServices(DocFlavor.SERVICE_FORMATTED.PRINTABLE, null);
String[] arrayOfString = new String[arrayOfPrintService.length];
for (int i = 0; i < arrayOfPrintService.length; i++)
arrayOfString[i] = arrayOfPrintService[i].getName();
return arrayOfString;
}
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