您的位置:首页 > 编程语言 > Java开发

java实现打印功能并控制打印方向

2015-08-05 12:38 453 查看
本文主要参考了Brett Spell 的文章:Java Pro Programming: Printing

主要的打印步骤有如下四点:

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

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

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

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

说java话就是:

PrintService service = PrintServiceLookup.lookupDefaultPrintService();
DocPrintJob job = service.createPrintJob();
URL url = new URL(
"http://www.apress.com/ApressCorporate/supplement/1/421/bcm.gif ");
DocFlavor flavor = DocFlavor.URL.GIF;
Doc doc = new SimpleDoc(url, flavor, null);
PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
attrs.add(new Copies(2));
job.print(doc, attrs);


这里要说明的有以下几点:

PrintServiceLookup方法用于寻找打印服务,也可以指定AttributesDocFlavor用于寻找打印服务。但java不提供判断打印机是否在线的功能(至少我没发现,有知道的童鞋可以指教以下)。

DocFlavor方法用于选择匹配所需打印对象的属性,例如jpg、bmp和来源等。

AttributeSet方法,其实就是打印属性的设置,其实在一个打印过程中子接口有四个,其对应的实现类也有四个(貌似有5个,一个是总类)。详细见连接。这里需要提一下需要这么多打印属性设置接口的原因:

a. 包含 DocAttribute 的 DocAttributeSet 指定单个文档的特征和应用到单个文档的打印作业的设置。

b. 包含 PrintRequestAttribute 的 PrintRequestAttributeSet 指定应用到整个打印作业和打印作业中的所有文档的设置。

c. 包含 PrintJobAttribute 的 PrintJobAttributeSet 报告打印作业的状态。

d. 包含 PrintServiceAttribute 的 PrintServiceAttributeSet 报告 Print Service 实例的状态。

可见这里有四个是需要使用在不同的应用场合和配合不同需求的。

控制打印方向:用于控制打印方向的设置就在这些属性中。首先讲一下这些属性的使用方法:其实也很简单,就是在实例化之后,直接
.add();
就可以了。例如实例化后实现控制打印方向和彩打支持:

DocAttributeSet attrs = new HashDocAttributeSet();

attrs.add(OrientationRequested.PORTRAIT);

attrs.add(ColorSupported.SUPPORTED);


而print所支持的所有序列化字段都在该序列化表格链接中可以找到。至于为什么需要序列化这一步,粗略可以理解为:

把对象转换为字节序列的过程称为对象的序列化。

把字节序列恢复为对象的过程称为对象的反序列化。

对象的序列化主要有两种用途:

1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;

2) 在网络上传送对象的字节序列。

有兴趣的朋友,可以翻看这篇详细讲解序列化与反序列化的文章:Java基础学习总结——Java对象的序列化和反序列化

最后一步就是打印了,打印的时候会包含文档和属性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 打印