操作打印标签 | Java
打印架构简介
XPS 文档和XPS 对象模型可以使用打印标签对象(打印架构规范中引入了这些对象)来定义文档在打印机和查看应用程序上的打印首选项。
打印架构是一个基于 XML 的分层架构,用于组织和描述打印机或打印作业的属性。它由两个主要部分组成:打印架构关键字和打印架构框架。打印架构关键字是描述打印机属性和打印作业格式意图的元素实例,而打印架构框架则以分层结构定义了一组 XML 元素类型,并指定了如何将这些元素类型一起使用。
打印架构技术(称为PrintTicket)是使用打印架构框架指定的打印架构关键字构建的。打印架构规范允许第三方扩展架构,使打印架构用户能够超越打印架构关键字定义的Property、Feature、Option或ParameterInit实例。第三方元素实例可以添加到打印架构关键字定义的实例中;但是,私有的第三方Property实例必须属于与创建该命名空间的第三方明确关联的命名空间。
Aspose.Page for Java 支持打印标签
Aspose.Page for Java API 包含一组类,这些类封装了由 Print Schema 关键字定义的元素。由于这些类数量众多,本文将仅讨论使用 Aspose.Page API 在 XPS 文档中操作打印标签的几种最常用技术。我们将首先讨论打印标签中包含的每个功能类的实例化,然后演示如何将这些功能集成到打印标签中。
指定输入纸盒
JobInputBin 功能可识别设备中已安装的输入纸盒或设备支持的完整纸盒列表。它允许根据每个作业指定输入纸盒。此外,还有 DocumentInputBin 和 PageInputBin 功能,允许分别按文档和按页面指定输入箱。任何打印票据文档都应仅包含这三个功能之一。所有功能均源自 InputBin 类,并且具有相同签名的构造函数,因此我们将使用 JobInputBin 进行演示。
以下 Java 代码行
1new JobInputBin(InputBin.InputBinOption.AutoSelect);
为作业级打印票据生成一项功能,指示打印设备根据配置自动选择最佳选项。
InputBin.InputBinOption 类定义了静态字段,作为各种输入箱选项的基础。每个选项可以包含其他属性,例如
InputBin.BinType、
InputBin.FeedDirection、
InputBin.FeedFace、
InputBin.FeedType、
InputBin.MediaCapacity,
InputBin.MediaPath、
InputBin.MediaSizeAutoSense、
InputBin.MediaTypeAutoSense 和
InputBin.MediaSheetCapacity。要指定这些属性,您应该克隆基本属性,然后使用所需属性列表调用 add()
方法:
1new JobInputBin(InputBin.InputBinOption.Manual.clone().add(
2 InputBin.FeedFace.FaceDown, InputBin.FeedDirection.LongEdgeFirst, new InputBin.MediaSheetCapacity(100)));
要查看可用属性值的完整列表,请参阅打印模式规范和 Aspose.Page API 参考 的相关部分。
指定出纸盒
JobOutputBin 功能描述了设备中安装的出纸盒或设备支持的出纸盒的完整列表。JobOutputBin
、
DocumentOutputBin 和
PageOutputBin 关键字互斥;一个打印票据中只能指定一个。
每个选项可能包含
OutputBin.BinType 和
OutputBin.MediaSheetCapacity 属性。因此,可以按如下方式实例化 JobOutputBin
功能:
1new JobOutputBin(new OutputBin.OutputBinOption(OutputBin.BinType.Sorter),
2 new OutputBin.OutputBinOption(OutputBin.BinType.Stacker, new OutputBin.MediaSheetCapacity(100)));
指定页面方向
PageOrientation 功能定义物理介质页面的方向。可用选项列表可在 API 参考的 PageOrientation.PageOrientationOption 类部分找到。以下是如何生成此功能实例的示例:
1new PageOrientation(PageOrientation.PageOrientationOption.Landscape);
指定输出的双面打印模式
JobDuplexAllDocumentsContiguously 功能描述了输出的双面打印特性。双面打印功能支持在介质的两面打印,作业中的所有文档都将连续地进行双面打印。“JobDuplexAllDocumentsContiguously”和 DocumentDuplex 互斥,驱动程序将决定如何处理这两个关键字之间的约束。后者关键字表示作业中的每个文档都将单独进行双面打印。
此功能提供
三个选项 - OneSided
、twoSidedLongEdge
和 twoSidedShortEdge
。第一个选项没有属性,后两个选项通过
Duplex.DuplexMode 进行参数化。
例如,如果您想为 XPS 文件指定双面打印,使页面与 MediaSizeHeight 平行翻转,您可以按如下方式操作:
1new JobDuplexAllDocumentsContiguously(Duplex.DuplexOption.twoSidedLongEdge(Duplex.DuplexMode.Automatic));
如果您喜欢单面打印,则可以在打印票中包含以下功能:
1new JobDuplexAllDocumentsContiguously(Duplex.DuplexOption.OneSided);
指定输出的颜色设置
PageOutputColor 功能描述了输出颜色设置的特性。此功能有三个选项:Color
、Grayscale
和 Monochrome
,每个选项都包含两个整数属性:DeviceBitsPerPixel
和 DriverBitsPerPixel
。
例如,如果您希望彩色打印机以灰度打印 XPS 文件,则可以在打印标签中添加以下功能:
1new PageOutputColor(PageOutputColor.PageOutputColorOption.Grayscale(0, 8));
使用不同级别的打印标签
如果您正在处理由其他人创建的 XPS 文件,则可能需要调整其打印标签(如果存在)。要检索作业级别的打印标签,您只需调用 XpsDocument
对象的
getJobPrintTicket() 方法即可:
1JobPrintTicket pt = document.getJobPrintTicket();
要检索 XPS 文件中特定文档的打印票证,您应该使用 getDocumentPrintTicket() 方法:
1DocumentPrintTicket pt = document.getDocumentPrintTicket(<n>);
其中 <n>
是 XPS 文件中文档的编号。
要检索 XPS 文件中特定页面的打印标签,您应该使用 getPagePrintTicket() 方法:
1PagePrintTicket pt = document.getPagePrintTicket(<m>, <n>);
其中 <m>
是 XPS 文件中文档的编号,<n>
是第 m 个文档的页码。
检索到打印票据实例后,如果该实例不等于 null
,则可以添加如上文所示构造的功能:
1pt.add(<features>);
其中 <features>
是一个可变长度的数组,其中包含适用于特定级别打印标签的功能。如果旧打印标签已包含您尝试添加的某些功能,则新实例将覆盖这些功能。
如果您不想修改现有打印标签,而是分配一个全新的实例(例如新的 XPS 文件),那么对于作业级打印标签,您应该使用 setJobPrintTicket() 方法:
1document.setJobPrintTicket(new JobPrintTicket(<features>));
其中 <features>
是一个适用于作业级打印标签的可变长度特征数组。
如果您想为 XPS 文件中的特定文档分配打印标签,请使用 setDocumentPrintTicket() 方法:
1document.setDocumentPrintTicket(<n>, new DocumentPrintTicket(<features>));
这里,“
最后,如果您想为 XPS 文件中的特定页面分配打印标签,您应该使用 setPagePrintTicket() 方法:
1document.setPagePrintTicket(<m>, <n>, new PagePrintTicket(<features>));
其中 <m>
是 XPS 文件中文档的编号,<n>
是第 m 个文档的页码,<features>
是一个可变长度的特征数组,用于表示页面级打印标签。
以下是 Aspose.Page for Java 示例项目中作业级打印标签的完整代码示例:
1// For complete examples and data files, please go to https://github.com/aspose-page/Aspose.Page-for-Java
2// The path to the documents directory.
3String dataDir = Utils.getDataDir();
4
5// Create new XPS document
6final XpsDocument document = new XpsDocument();
7try {
8 // Set a custom job-level print ticket
9 document.setJobPrintTicket(new JobPrintTicket(
10 // Specify input bin.
11 new JobInputBin(InputBin.InputBinOption.Manual.clone().add(
12 InputBin.FeedFace.FaceDown, InputBin.FeedDirection.LongEdgeFirst, new InputBin.MediaSheetCapacity(100))),
13 // Specify output bin.
14 new JobOutputBin(new OutputBin.OutputBinOption(OutputBin.BinType.Sorter),
15 new OutputBin.OutputBinOption(OutputBin.BinType.Stacker, new OutputBin.MediaSheetCapacity(100))),
16 // Specify page orientation.
17 new PageOrientation(PageOrientation.PageOrientationOption.Landscape),
18 // Specify duplex mode fof the output.
19 new JobDuplexAllDocumentsContiguously(Duplex.DuplexOption.twoSidedLongEdge(Duplex.DuplexMode.Automatic)),
20 // Specify the color settings for the output.
21 new PageOutputColor(PageOutputColor.PageOutputColorOption.Grayscale(0, 8))));
22
23 // Save the document with the custom job-level print ticket.
24 document.save(dataDir + "output1.xps");
25} finally {
26 if (document != null)
27 document.close();
28}