模块 java.desktop
包 javax.print
包javax.print
为 Java 打印服务 API 提供主要类和接口。 Java 打印服务 API 使客户端和服务应用程序能够:
- 根据功能发现和选择打印服务
- 指定打印数据的格式
- 将打印作业提交给支持要打印的文档类型的服务。
打印服务发现
应用程序调用抽象类PrintServiceLookup
的静态方法来定位能够满足应用程序打印请求的打印服务。例如,要打印一个双面文档,应用程序首先需要找到具有双面打印能力的打印机。
JDK 包括可以定位标准平台打印机的 PrintServiceLookup
实现。要定位其他类型的打印机,例如 IPP 打印机或 JINI 打印机,打印服务提供商可以编写 PrintServiceLookup
的实现。打印服务提供商可以使用 ServiceLoader
设施动态安装这些 PrintServiceLookup
实现。
属性定义
javax.print.attribute
和 javax.print.attribute.standard
包定义了打印属性,这些属性描述了打印服务的功能,指定了打印作业的要求,并跟踪了打印作业的进度。
javax.print.attribute
包描述了属性的类型以及如何将它们收集到集合中。 javax.print.attribute.standard
包列举了 API 支持的所有标准属性,其中大部分是 IETF 规范 RFC 2911 互联网打印协议,1.1:模型和语义 中规定的属性的实现,日期为 2000 年 9 月。javax.print.attribute.standard
中规定的属性包括常用功能,例如:分辨率、副本、媒体大小、作业优先级和页面范围。
文档类型规范
DocFlavor
类表示打印数据格式,例如 JPEG 或 PostScript。 DocFlavor
对象由描述格式的 MIME 类型和指示文档如何传送到打印机或输出流的文档表示类名称组成。应用程序使用 DocFlavor
和属性集来查找可以打印 DocFlavor
指定的文档类型并具有属性集指定的功能的打印机。
使用 API
使用 Java Print Service API 的典型应用程序执行以下步骤来处理打印请求:- 选择一个
DocFlavor
。 - 创建一组属性。
- 找到可以处理
DocFlavor
和属性集指定的打印请求的打印服务。 - 创建一个封装
DocFlavor
和实际打印数据的Doc
对象,它可以采用多种形式,包括:Postscript 文件、JPEG 图像、URL
或纯文本。 - 从打印服务获取由
DocPrintJob
表示的打印作业。 - 调用打印作业的打印方法。
FileInputStream psStream; try { psStream = new FileInputStream("file.ps"); } catch (FileNotFoundException ffne) { } if (psStream == null) { return; } DocFlavor psInFormat = DocFlavor.INPUT_STREAM.POSTSCRIPT; Doc myDoc = new SimpleDoc(psStream, psInFormat, null); PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); aset.add(new Copies(5)); aset.add(MediaSizeName.ISO_A4); aset.add(Sides.DUPLEX); PrintService[] services = PrintServiceLookup.lookupPrintServices(psInFormat, aset); if (services.length > 0) { DocPrintJob job = services[0].createPrintJob(); try { job.print(myDoc, aset); } catch (PrintException pe) {} }
请注意:在 javax.print
API 中,方法的 null
引用参数是不正确的,除非在方法上明确记录为具有有意义的解释。相反的用法是不正确的编码,可能会立即或稍后导致运行时异常。 IllegalArgumentException
和 NullPointerException
是此类情况下典型且可接受的运行时异常的示例。
- 自从:
- 1.4
-
类描述接口
AttributeException
是一个混合接口,PrintException
的子类可以实现它来报告涉及一个或多个特定打印服务实例不支持的打印属性的错误情况。打印应用程序使用此接口取消打印作业。接口Doc
指定为打印作业提供一份打印数据的对象的接口。类DocFlavor
封装了一个对象,该对象指定将打印数据提供给DocPrintJob
的格式。类DocFlavor.BYTE_ARRAY
提供预定义的静态常量DocFlavor
对象,例如使用字节数组 (byte[]
) 作为打印数据表示类的文档风格。类DocFlavor.CHAR_ARRAY
提供预定义的静态常量DocFlavor
对象,例如使用字符数组 (char[]
) 作为打印数据表示类的文档风格。类DocFlavor.SERVICE_FORMATTED
提供预定义的静态常量DocFlavor
对象,例如服务格式化打印数据的文档风格。类DocFlavor.URL
提供预定义的静态常量DocFlavor
对象。此接口代表一个打印作业,该作业可以打印具有一组作业属性的指定文档。接口MultiDoc
指定为打印作业提供多个打印数据的对象的接口。从MultiDocPrintService
获得,MultiDocPrintJob
可以将指定的文档集合打印为具有一组作业属性的单个打印作业。接口MultiPrintService
是MultiDocPrintJob
的工厂。类PrintException
封装了使用打印服务实例时发生的与打印相关的错误情况。接口PrintService
是DocPrintJob
的工厂。此类的实现为特定类型的打印服务(通常相当于打印机)提供查找服务。此类是 UI 便利方法的集合,它提供图形用户对话框,用于浏览通过 Java Print Service API 查找的打印服务。服务可以选择性地提供 UI,允许在不同角色中进行不同风格的交互。此类是接口Doc
的实现,可用于许多常见的打印请求。此类扩展PrintService
并表示打印服务,该服务将不同格式的数据打印到客户端提供的输出流。StreamPrintServiceFactory
是StreamPrintService
实例的工厂,它可以以描述为 mime 类型的特定文档格式打印到输出流。