使用打印服务和属性
从先前的类中,您已经了解到 Java 2D 打印 API 支持页面成像,显示打印和页面设置对话框以及指定打印属性。打印服务是任何打印子系统的另一个关键组件。
Java 打印服务(JPS)API **扩展了当前的 Java 2D 打印功能,以提供以下功能:
-
应用程序通过动态查询打印机功能来发现满足其需求的打印机。
-
应用程序扩展了 JPS API 附带的属性。
-
第三方可以使用服务提供商interface插入自己的打印服务,该服务提供商可以打印不同格式的文件,包括 Postscript,PDF 和 SVG。
Java Print Service API 包含四个软件包:
javax.print包提供 Java Print Service API 的主要类和interface。它使 Client 端和服务器应用程序能够:
-
根据其功能发现并选择打印服务。
-
指定打印数据的格式。
-
将打印作业提交给支持要打印文档类型的服务。
文件类型规格
DocFlavor类代表打印数据的格式,例如 JPEG 或 PostScript。 DocFlavor
格式由两部分组成:MIME 类型和表示形式名称。 MIME 类型描述格式,而文档表示形式类名称表明如何将文档传送到打印机或输出流。应用程序使用DocFlavor
和属性集来查找具有该属性集指定的功能的打印机。此代码示例演示了获得StreamPrintServiceFactory
对象数组,该数组可以返回StreamPrintService
对象,这些对象能够将 GIF 图像转换为 PostScript:
DocFlavor flavor = DocFlavor.INPUT_STREAM.GIF;
String psMimeType = DocFlavor.BYTE_ARRAY.
POSTSCRIPT.getMimeType();
StreamPrintServiceFactory[] psfactories =
StreamPrintServiceFactory.
lookupStreamPrintServiceFactories(
flavor, psMimeType);
Attribute Definitions
javax.print.attribute和javax.print.attribute.standard程序包定义打印属性,这些属性描述打印服务的功能,指定打印作业的要求并跟踪打印作业的进度。
例如,如果您想使用 A4 纸张格式并打印三份文档,则必须创建一组实现PrintRequestAttributeSet
interface的以下属性:
PrintRequestAttributeSet attr_set =
new HashPrintRequestAttributeSet();
attr_set.add(MediaSize.ISO_A4);
attr_set.add(new Copies(3));
然后,您必须将属性集和DocFlavor
一起传递给打印作业的print
方法。
打印服务发现
应用程序调用抽象类PrintServiceLookup
的静态方法来查找具有满足应用程序打印请求能力的打印服务。例如,为了打印 Double 面文档的两个副本,应用程序首先需要查找具有 Double 面打印功能的打印机:
DocFlavor doc_flavor = DocFlavor.INPUT_STREAM.PDF;
PrintRequestAttributeSet attr_set =
new HashPrintRequestAttributeSet();
attr_set.add(new Copies(2));
attr_set.add(Sides.DUPLEX);
PrintService[] service = PrintServiceLookup.
lookupPrintServices(doc_flavor,
attr_set);
API 的常用用法
总之,Java Print Service API 执行以下步骤来处理打印请求:
-
选择一个
DocFlavor
。 -
创建一组属性。
-
找到可以处理
DocFlavor
和属性集指定的打印请求的打印服务。 -
创建一个封装
DocFlavor
和实际打印数据的Doc
对象。 -
从打印服务获取由
DocPrintJob
表示的打印作业。 -
调用打印作业的
print
方法。
有关 Java 打印服务的更多信息,请参见Java 2D 打印服务 API 用户指南。