Java-PrintService-Java打印-中文版API.docx
Java Print Service (JPS)是一个Java打印API,设计此API是为了支持在所有Java平台上的打印工作——包括微空间平台,并且支持现有的API。这个统一的打印 API包括了IETF规范RFC 2911中Internet Printing Protocol (IPP) 1.1 所指定的标准属性以及在此基础上的可扩展的打印属性。通过这些属性,客户端和服务器端应用程序就能够发现并选定具有完成属性设置所指定的功能的打印机。除了API中包含的StreamPrintServece,它还允许应用程序将打印数据转码为不同的格式,第三方也可以通过Service Provider Interface (SPI)动态安装他们自己的打印服务。 ### Java Print Service (JPS) 概述 Java Print Service (JPS) 是一项重要的 Java 打印 API,旨在提供跨平台的打印解决方案,适用于所有 Java 平台,包括微型空间平台。该 API 支持现有 API 的同时,还遵循 IETF 规范 RFC 2911 中定义的 Internet Printing Protocol (IPP) 1.1 标准属性,并允许进一步扩展打印属性。 #### Java Print Service 架构 JPS 由多个关键组件构成,包括但不限于: - **`javax.print` 包**:提供核心打印服务 API,包括 `PrintService` 接口,它是所有打印服务的基础。 - **`javax.print.attribute` 包**:提供了一套标准属性,用于描述打印请求的需求。 - **`javax.print.event` 包**:提供事件处理机制,使得开发人员能够监控打印作业的状态变化。 - **`javax.print.service` 包**:定义了打印服务的查找和管理机制。 - **`javax.print.attribute.standard` 包**:包含了预定义的标准属性类。 - **`javax.print.attribute.doc` 包**:提供了描述文档属性的类。 - **`javax.print.attribute.printer` 包**:提供了描述打印机属性的类。 - **`javax.print.attribute.default_` 包**:定义了默认属性类。 ### 发现打印服务 JPS 提供了一种机制,允许客户端和服务器端应用程序发现可用的打印服务。这一过程通常涉及以下步骤: 1. **服务发现**:使用 `PrintServiceLookup` 类的方法,如 `lookupDefaultPrintService()` 或 `lookupPrintServices()` 来查找可用的服务。 2. **属性查询**:一旦找到了服务,就可以查询其支持的属性,以确定该服务是否满足打印需求。 3. **打印任务创建**:选择合适的打印服务后,即可根据指定的属性创建打印任务。 ### 指定打印数据格式 JPS 允许指定多种打印数据格式,以满足不同的应用场景。这包括但不限于: - **标准文档格式**:例如 PDF、PostScript 等。 - **文本数据**:如纯文本或富文本格式。 - **图像数据**:支持 JPEG、GIF 等常见格式。 - **自适应打印数据**:可以根据目标打印机的能力进行调整的数据格式。 ### 创建打印作业 在 JPS 中,创建打印作业通常涉及到以下几个步骤: 1. **选择打印服务**:通过 `PrintServiceLookup` 查找并选择一个合适的打印服务。 2. **构建文档**:使用 `DocFlavor` 和 `Doc` 类来描述打印文档的内容和格式。 3. **指定属性**:通过 `HashPrintRequestAttributeSet` 或其他属性集合来指定打印请求的具体需求。 4. **提交打印任务**:使用 `PrintService` 的 `createPrintJob()` 方法创建打印作业,并调用 `print()` 方法提交任务。 ### javax.print.event 包 此包提供了一组事件处理机制,用于监控打印作业的状态变化。主要的事件监听器包括: - **`PrintJobAttributeListener`**:用于监听打印作业属性的变化。 - **`PrintJobListener`**:用于监听打印作业的状态变化。 ### 应用程序如何使用 JPS #### 基本示例 下面是一个简单的示例,展示如何使用 JPS 创建和提交打印作业: ```java import javax.print.*; import javax.print.attribute.*; import javax.print.attribute.standard.*; // 查找默认打印服务 PrintService service = PrintServiceLookup.lookupDefaultPrintService(); // 创建打印请求属性集 HashPrintRequestAttributeSet requestAttr = new HashPrintRequestAttributeSet(); requestAttr.add(Copies.DEFAULT); requestAttr.add(OrientationRequested.PORTRAIT); // 创建文档 DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; ByteArrayInputStream bais = new ByteArrayInputStream("Hello World".getBytes()); Doc doc = new SimpleDoc(bais, flavor, null); // 创建打印作业 DocPrintJob job = service.createPrintJob(); // 提交打印作业 job.print(doc, requestAttr); ``` ### 属性 JPS 定义了一系列属性,用于描述打印作业的各种需求,包括但不限于: - **`Copies`**:指定打印副本的数量。 - **`Media`**:描述使用的媒介类型。 - **`MediaSize`**:描述媒介尺寸。 - **`MediaPrintableArea`**:描述可打印区域。 - **`OrientationRequested`**:指定页面的方向(横版或竖版)。 - **`Sides`**:描述双面打印的需求。 - **`Fidelity`**:描述打印保真度的要求。 ### 使用 JPS 属性 为了利用 JPS 属性,开发人员需要按照以下步骤操作: 1. **创建属性集**:使用 `HashPrintRequestAttributeSet` 或 `PrintRequestAttributeSet` 等类来创建一个属性集。 2. **添加属性**:根据需求向属性集中添加特定属性。 3. **应用属性**:在创建打印作业时将属性集传递给相应的构造函数或方法。 ### 指定文档类型 JPS 支持多种文档类型,可以通过 `DocFlavor` 类来指定。常见的 `DocFlavor` 包括: - **`DocFlavor.INPUT_STREAM.AUTOSENSE`**:自动识别输入流的内容类型。 - **`DocFlavor.BYTE_ARRAY.AUTOSENSE`**:自动识别字节数组的内容类型。 - **具体格式**:如 `DocFlavor.INPUT_STREAM.PDF` 表示 PDF 文档。 ### 用户格式打印数据 用户还可以定义自己的文档格式,并通过 SPI(Service Provider Interface)机制注册到 JPS 中。这允许应用程序更加灵活地处理各种打印数据。 ### 预定义数据格式的 MIME 类型 JPS 支持多种预定义的数据格式,每种格式都有对应的 MIME 类型,例如: - **文本数据**:`text/plain` 或 `text/html`。 - **页面描述语言文档**:如 `application/postscript`。 - **图像数据**:如 `image/jpeg` 或 `image/gif`。 ### 流化文档 除了传统的打印文档,JPS 还支持将文档数据流化到目标设备。例如,使用 `StreamPrintService` 可以将文档数据直接写入到目标设备的输出流中。 ### 示例代码 #### 示例:PrintPS.java ```java import javax.print.*; import javax.print.attribute.standard.*; import java.io.FileInputStream; public class PrintPS { public static void main(String[] args) throws Exception { PrintService ps = PrintServiceLookup.lookupDefaultPrintService(); DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT; FileInputStream fis = new FileInputStream("test.ps"); Doc doc = new SimpleDoc(fis, flavor, null); DocPrintJob dpj = ps.createPrintJob(); dpj.print(doc, null); } } ``` #### 示例:PrintGIFtoStream.java ```java import javax.print.*; import javax.print.attribute.standard.*; import java.io.InputStream; public class PrintGIFtoStream { public static void main(String[] args) throws Exception { PrintService ps = PrintServiceLookup.lookupDefaultPrintService(); DocFlavor flavor = DocFlavor.INPUT_STREAM.GIF; InputStream is = PrintGIFtoStream.class.getResourceAsStream("/test.gif"); Doc doc = new SimpleDoc(is, flavor, null); DocPrintJob dpj = ps.createPrintJob(); dpj.print(doc, null); } } ``` ### 总结 Java Print Service (JPS) 是一个功能强大的打印 API,旨在解决 Java 开发者在打印领域的各种需求。通过支持标准的打印协议、丰富的属性配置选项以及灵活的数据格式处理能力,JPS 成为了 Java 平台上不可或缺的打印工具之一。开发人员可以根据具体的应用场景灵活运用 JPS 的各项功能,实现高效稳定的打印解决方案。
剩余63页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 2024 年 Java 开发人员路线图.zip
- matplotlib-3.7.5-cp38-cp38-win-amd64.whl
- Android TV 开发框架: 包含 移动的边框,键盘,标题栏
- 图像处理中白平衡算法之一的灰度世界算法的MATLAB实现
- Cython-3.0.10-cp38-cp38-win-amd64.whl
- zotero安卓版"Zotero Beta"版本1.0.0-118
- Web应用项目开发的三层架构
- 基于QT和OpenCV的Mask编辑工具(python源码)
- 418.基于SpringBoot的个性化电影推荐系统.zip
- 417.基于SpringBoot的高校学生饮食推荐系统.zip