使用打印服务和属性

从先前的类中,您已经了解到 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.attributejavax.print.attribute.standard程序包定义打印属性,这些属性描述打印服务的功能,指定打印作业的要求并跟踪打印作业的进度。

例如,如果您想使用 A4 纸张格式并打印三份文档,则必须创建一组实现PrintRequestAttributeSetinterface的以下属性:

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 用户指南