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话就是:
这里要说明的有以下几点:
PrintServiceLookup方法用于寻找打印服务,也可以指定Attributes和 DocFlavor用于寻找打印服务。但java不提供判断打印机是否在线的功能(至少我没发现,有知道的童鞋可以指教以下)。
DocFlavor方法用于选择匹配所需打印对象的属性,例如jpg、bmp和来源等。
AttributeSet方法,其实就是打印属性的设置,其实在一个打印过程中子接口有四个,其对应的实现类也有四个(貌似有5个,一个是总类)。详细见连接。这里需要提一下需要这么多打印属性设置接口的原因:
a. 包含 DocAttribute 的 DocAttributeSet 指定单个文档的特征和应用到单个文档的打印作业的设置。
b. 包含 PrintRequestAttribute 的 PrintRequestAttributeSet 指定应用到整个打印作业和打印作业中的所有文档的设置。
c. 包含 PrintJobAttribute 的 PrintJobAttributeSet 报告打印作业的状态。
d. 包含 PrintServiceAttribute 的 PrintServiceAttributeSet 报告 Print Service 实例的状态。
可见这里有四个是需要使用在不同的应用场合和配合不同需求的。
控制打印方向:用于控制打印方向的设置就在这些属性中。首先讲一下这些属性的使用方法:其实也很简单,就是在实例化之后,直接
而print所支持的所有序列化字段都在该序列化表格链接中可以找到。至于为什么需要序列化这一步,粗略可以理解为:
把对象转换为字节序列的过程称为对象的序列化。
把字节序列恢复为对象的过程称为对象的反序列化。
对象的序列化主要有两种用途:
1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
2) 在网络上传送对象的字节序列。
有兴趣的朋友,可以翻看这篇详细讲解序列化与反序列化的文章:Java基础学习总结——Java对象的序列化和反序列化
最后一步就是打印了,打印的时候会包含文档和属性。
主要的打印步骤有如下四点:
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方法用于寻找打印服务,也可以指定Attributes和 DocFlavor用于寻找打印服务。但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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统