使用打印标签 | .NET
打印架构
XPS 文档和XPS 对象模型可以使用打印标签对象(如[打印架构规范]( https://download.microsoft.com/download/D/E/C/DECA6E6B-3E81-48E7-B7EF-6D92A547D03C/print-schema-spec-2-0.zip 中所述)来指定文档对打印机和查看应用程序的打印首选项。
打印架构是一种基于 XML 的架构,具有层次结构,用于组织和描述打印机或打印作业的属性。它由两个主要组件组成:打印架构关键字和打印架构框架。打印架构关键字是描述打印机属性和打印作业格式意图的元素实例,而打印架构框架则以层次结构定义了 XML 元素类型的集合,并指定了如何将这些元素类型一起使用。
打印架构技术(称为 PrintTicket)是使用打印架构框架指定的打印架构关键字构建的。打印架构规范支持第三方扩展架构,因此打印架构用户不再局限于由打印架构关键字定义的 Property、Feature、Option 或 ParameterInit 实例。第三方元素实例可以添加到由打印架构关键字定义的元素实例中;但是,私有的第三方 Property 实例必须属于与创建该命名空间的第三方明确关联的命名空间。
Aspose.Page for .NET 中的打印标签支持
Aspose.Page for .NET API 包含一组类,这些类封装了由打印模式关键字定义的元素。由于这些类的数量非常多,本文仅介绍使用 Aspose.Page API 在 XPS 文档中操作打印标签的一些最常用技术。我们将首先讨论打印标签中包含的每个功能类的实例化。然后,我们将了解如何在打印标签中包含这些功能。
如何指定输入纸盒
JobInputBin 功能描述了设备中安装的输入纸盒或设备支持的完整纸盒列表。它允许根据每个作业指定输入纸盒。此外,还有 DocumentInputBin 和 PageInputBin 功能,允许分别按文档和按页面指定输入箱。任何打印票据文档都应该只包含这三个功能中的一个。它们都继承自 InputBin 类,并且具有相同签名的构造函数,因此我们将使用 JobInputBin 进行演示。
以下代码
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
对象的
JobPrintTicket 属性即可:
1JobPrintTicket pt = document.JobPrintTicket;
要获取 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 文件也是如此),那么对于作业级打印票据,您应该再次使用 JobPrintTicket
属性:
1document.JobPrintTicket = new JobPrintTicket(<features>);
其中 <features>
是一个适用于作业打印标签的可变长度特征数组。
如果您想为 XPS 文件中的特定文档分配打印标签,则应使用 SetDocumentPrintTicket() 方法:
1document.SetDocumentPrintTicket(<n>, new DocumentPrintTicket(<features>));
其中 <n>
是 XPS 文件中文档的编号,<features>
是适用于文档级打印标签的可变长度特征数组。
最后,如果您想为 XPS 文件中的特定页面分配打印标签,则应使用 SetPagePrintTicket() 方法:
1document.SetPagePrintTicket(<m>, <n>, new PagePrintTicket(<features>));
其中 <m>
是 XPS 文件中文档的编号,<n>
是第 m 个文档的页码,<features>
是适用于页面级打印标签的可变长度特征数组。
以下是 Aspose.Page for .NET 示例项目中作业级打印标签的完整代码示例:
1// For complete examples and data files, please go to https://github.com/aspose-page/Aspose.Page-for-.NET
2// The path to the documents directory.
3string dir = RunExamples.GetDataDir_WorkingWithPrintTickets();
4
5// Create new XPS document
6using (XpsDocument document = new XpsDocument())
7{
8 // Set a custom job-level print ticket
9 document.JobPrintTicket = 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(dir + "output1.xps");
25}