文档

Java™教程
隐藏目录
使用打印服务和属性
路径:2D图形
教程:打印

使用打印服务和属性

从之前的课程中,你已经学到了Java 2D打印API支持页面成像、显示打印和页面设置对话框,并指定打印属性。打印服务是任何打印子系统的另一个关键组件。

Java打印服务(JPS)API扩展了当前的Java 2D打印功能,提供以下功能:

Java打印服务API由四个包组成:

此图表示打印所需的四个包

javax.print包提供了Java打印服务API的主要类和接口。它使客户端和服务器应用程序能够:

文档类型规范

DocFlavor类表示打印数据的格式,如JPEG或PostScript。 DocFlavor格式由两部分组成:MIME类型和表示类名。 MIME类型描述格式,文档表示类名指示如何将文档传递给打印机或输出流。应用程序使用DocFlavor和属性集来查找具有属性集指定的功能的打印机。以下代码示例演示了如何获取能够将GIF图像转换为PostScript的StreamPrintService对象的StreamPrintServiceFactory对象数组:

DocFlavor flavor  = DocFlavor.INPUT_STREAM.GIF;
String psMimeType = DocFlavor.BYTE_ARRAY.
                    POSTSCRIPT.getMimeType();
StreamPrintServiceFactory[] psfactories =
              StreamPrintServiceFactory.
              lookupStreamPrintServiceFactories(
              flavor, psMimeType);

属性定义

javax.print.attributejavax.print.attribute.standard包定义了打印属性,描述了打印服务的功能,指定了打印作业的要求,并跟踪打印作业的进度。

例如,如果您想使用A4纸张格式并打印三份文档,您需要创建一组实现PrintRequestAttributeSet接口的属性:

PrintRequestAttributeSet attr_set =
    new HashPrintRequestAttributeSet();
attr_set.add(MediaSize.ISO_A4); 
attr_set.add(new Copies(3)); 

然后,您必须将属性集传递给打印作业的print方法,同时还需要传递DocFlavor

打印服务发现

应用程序调用抽象类PrintServiceLookup的静态方法来查找具有满足应用程序打印请求能力的打印服务。例如,为了打印一个双面文档的两份副本,应用程序首先需要找到具有双面打印能力的打印机:

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打印服务API执行以下步骤来处理打印请求:

  1. 选择一个DocFlavor
  2. 创建属性集。
  3. 找到一个能够根据DocFlavor和属性集处理打印请求的打印服务。
  4. 创建一个封装了DocFlavor和实际打印数据的Doc对象。
  5. 从打印服务中获取一个表示打印作业的DocPrintJob
  6. 调用打印作业的print方法。

有关Java打印服务的更多信息,请参阅Java 2D打印服务API用户指南


上一页: 打印多页文档
下一页: 打印用户界面的内容