使用打印标签 | C++

打印架构

XPS 文档XPS 对象模型可以使用打印标签对象(如[打印架构规范]( https://download.microsoft.com/download/D/E/C/DECA6E6B-3E81-48E7-B7EF-6D92A547D03C/print-schema-spec-2-0.zip 中所述)来指定文档对打印机和查看应用程序的打印首选项。

打印架构是一种基于 XML 的架构,具有层次结构,用于组织和描述打印机或打印作业的属性。它由两个主要组件组成:打印架构关键字打印架构框架。打印架构关键字是描述打印机属性和打印作业格式意图的元素实例,而打印架构框架则以层次结构定义了 XML 元素类型的集合,并指定了如何将这些元素类型一起使用。

打印架构技术(称为 PrintTicket)是使用打印架构框架指定的打印架构关键字构建的。打印架构规范支持第三方扩展架构,因此打印架构用户不再局限于由打印架构关键字定义的 PropertyFeatureOptionParameterInit 实例。第三方元素实例可以添加到由打印架构关键字定义的元素实例中;但是,私有的第三方 Property 实例必须属于与创建该命名空间的第三方明确关联的命名空间。

Aspose.Page for C++ 中的打印标签支持

Aspose.Page for C++ API 包含一组类,这些类封装了由打印模式关键字定义的元素。由于这些类的数量非常多,本文仅介绍使用 Aspose.Page API 在 XPS 文档中操作打印标签的一些最常用技术。我们将首先讨论打印标签中包含的每个功能类的实例化。然后,我们将了解如何在打印标签中包含这些功能。

如何指定输入纸盒

JobInputBin 功能描述了设备中安装的输入纸盒或设备支持的完整纸盒列表。它允许根据每个作业指定输入纸盒。此外,还有 DocumentInputBinPageInputBin 功能,允许分别按文档和按页面指定输入箱。任何打印票据文档都应该只包含这三个功能中的一个。它们都继承自 InputBin 类,并且具有相同签名的构造函数,因此我们将使用 JobInputBin 进行演示。

以下代码

1new JobInputBin(InputBin.InputBinOption.AutoSelect);

为作业打印单创建一个功能,指示打印设备根据配置自动选择最佳选项。

InputBin.InputBinOption 类定义了静态字段,每个字段都作为各种输入箱选项的基础。每个选项可以包含其他属性,例如 InputBin.BinTypeInputBin.FeedDirectionInputBin.FeedFaceInputBin.FeedTypeInputBin.MediaCapacityInputBin.MediaPathInputBin.MediaSizeAutoSenseInputBin.MediaTypeAutoSense 和要指定这些属性,您应该首先克隆基本属性,然后使用所需属性列表调用 Add() 方法:

1new JobInputBin(InputBin.InputBinOption.Manual.Clone().Add(
2    InputBin.FeedFace.FaceDown, InputBin.FeedDirection.LongEdgeFirst, new InputBin.MediaSheetCapacity(100)));

有关可用属性值的完整列表,请参阅打印模式规范和 Aspose.Page API 参考 的相关部分。

如何指定出纸盒

JobOutputBin 功能描述了设备中安装的出纸盒或设备支持的出纸盒的完整列表。JobOutputBinDocumentOutputBinPageOutputBin 关键字互斥;一张打印票据中只能指定一个。

每个选项可以包含以下属性: OutputBin.BinTypeOutputBin.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 互斥。驱动程序将决定这两个关键字之间的约束处理。后者关键字表示作业中的每个文档都将单独进行双面打印。

此功能有 三个选项 - OneSidedTwoSidedLongEdgeTwoSidedShortEdge。第一个选项没有属性,后两个选项通过 Duplex.DuplexMode 进行参数化。

例如,如果您想为 XPS 文件指定双面打印,使页面与 MediaSizeHeight 平行翻转,您可以按如下方式操作:

1new JobDuplexAllDocumentsContiguously(Duplex.DuplexOption.TwoSidedLongEdge(Duplex.DuplexMode.Automatic));

If you do not want your file to be duplexed, you can add the following feature to the print ticket:

1new JobDuplexAllDocumentsContiguously(Duplex.DuplexOption.OneSided);

如何指定输出的颜色设置

PageOutputColor 功能描述了输出颜色设置的特性。此功能有三个选项 - ColorGrayscaleMonochrome,每个选项都包含两个整数属性 - DeviceBitsPerPixelDriverBitsPerPixel

例如,如果您希望彩色打印机以灰度打印 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 C++ 示例项目中作业级打印标签的完整代码示例:

 1    // ExStart:CreateCustomPrintTicket
 2    // For complete examples and data files, please go to https://github.com/aspose-page/Aspose.Page-for-.NET
 3    // The path to the documents directory.
 4    System::String dir = RunExamples::GetDataDir_WorkingWithPrintTickets();
 5    
 6    // Create new XPS document
 7    {
 8        System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>();
 9        // Clearing resources under 'using' statement
10        System::Details::DisposeGuard<1> __dispose_guard_0({ document});
11        // ------------------------------------------
12        
13        try
14        {
15            // Set a custom job-level print ticket
16            document->set_JobPrintTicket(System::MakeObject<JobPrintTicket>(
17				System::MakeArray<System::SharedPtr<IJobPrintTicketItem>>({
18						// Specify input bin.
19						System::MakeObject<JobInputBin>(System::MakeArray<System::SharedPtr<InputBin::IInputBinItem>>({InputBin::InputBinOption::Manual->Clone()->Add(System::MakeArray<System::SharedPtr<InputBin::IInputBinOptionItem>>(
20							{InputBin::FeedFace::FaceDown, InputBin::FeedDirection::LongEdgeFirst, System::MakeObject<InputBin::MediaSheetCapacity>(100)}))})), 
21						// Specify output bin.
22						System::MakeObject<JobOutputBin>(System::MakeArray<System::SharedPtr<OutputBin::IOutputBinItem>>({
23								System::MakeObject<OutputBin::OutputBinOption>(System::MakeArray<System::SharedPtr<OutputBin::IOutputBinOptionItem>>(
24									{OutputBin::BinType::Sorter})),
25								System::MakeObject<OutputBin::OutputBinOption>(System::MakeArray<System::SharedPtr<OutputBin::IOutputBinOptionItem>>(
26									{OutputBin::BinType::Stacker, System::MakeObject<OutputBin::MediaSheetCapacity>(100)}))})),
27						// Specify page orientation.
28						System::MakeObject<PageOrientation>(System::MakeArray<System::SharedPtr<PageOrientation::PageOrientationOption>>(
29							{PageOrientation::PageOrientationOption::Landscape})),
30						// Specify duplex mode for the output.
31						System::MakeObject<JobDuplexAllDocumentsContiguously>(System::MakeArray<System::SharedPtr<Duplex::DuplexOption>>(
32							{Duplex::DuplexOption::TwoSidedLongEdge(Duplex::DuplexMode::Automatic)})), 
33						// Specify the color settings for the output.	
34						System::MakeObject<PageOutputColor>(System::MakeArray<System::SharedPtr<PageOutputColor::IPageOutputColorItem>>(
35							{PageOutputColor::PageOutputColorOption::Grayscale(0, 8)}))})));
36            
37            // Save the document with the custom job-level print ticket.
38            document->Save(dir + u"output1.xps");
39        }
40        catch(...)
41        {
42            __dispose_guard_0.SetCurrentException(std::current_exception());
43        }
44    }
45    // ExEnd:CreateCustomPrintTicket

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.