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