这些Java教程是针对JDK 8编写的。本页面中描述的示例和实践未利用后续版本中引入的改进,可能使用的技术已不再可用。
请参阅Java语言更改,了解Java SE 9及后续版本中的更新语言功能摘要。
请参阅JDK发布说明,了解所有JDK版本的新功能、增强功能和已删除或已弃用选项的信息。
从之前的课程中,你已经学到了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.attribute和javax.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);
总之,Java打印服务API执行以下步骤来处理打印请求:
DocFlavor。DocFlavor和属性集处理打印请求的打印服务。DocFlavor和实际打印数据的Doc对象。DocPrintJob。print方法。有关Java打印服务的更多信息,请参阅Java 2D打印服务API用户指南。