打印票证合并

重要

新式打印平台是 Windows 与打印机通信的首选方式。 建议使用 Microsoft 的 IPP 收件箱类驱动程序以及打印支持应用 (PSA) 来自定义 Windows 10 和 11 中的打印体验,以便进行打印机设备开发。

有关详细信息,请参阅新式打印平台打印支持应用设计指南

根据关联文档部分,在打印驱动程序中处理的 PrintTicket 对象具有分层关系。 下图说明了 XPS 文档中这些部分之间的关系。

此图表说明了 xps 文档中的文档部分。

层次结构中的每个打印票证级别都具有不同的范围。 使用打印票证信息的打印驱动程序筛选器模块必须维护该范围,因为系统从文档流中读取打印票证对象。 以下图表演示了如何在打印驱动程序筛选器模块中完成此操作。

此图表说明了如何以逻辑方式合并不同的打印票证级别。

由于筛选器会读取文档部分,因此筛选器将读取、合并、验证和缓存打印票证对象,以便配置筛选器将如何处理每个文档部分。 上一图表说明了如何以逻辑方式合并不同的打印票证级别,下面的伪代码说明了可如何实现此合并。

class Filter
{
 PrintTicket Saved_FDS_PT;
 PrintTicket Saved_FD_PT;

 ProcessFDS(pIFixedDocumentSequence)
    {
 Saved_FDS_PT = pIFixedDocumentSequence->GetPrintTicket();

        // continue processing the FixedDocumentSequence part
    }

 ProcessFD(pIFixedDocument)
    {
 Saved_FD_PT->Release();

        temp = pIFixedDocument->GetPrintTicket();

 Saved_FD_PT = PrintTicketMergeAndValidate(
 Saved_FDS_PT, temp);

        // continue processing the FixedDocument part
    }

 ProcessPage(IFixedPage)
    {
        temp = pIFixedPage->GetPrintTicket();

 PagePT = PrintTicketMergeAndValidate(Saved_FD_PT, temp);

        // continue processing the FixedPage part
    }

 PrintTicket PrintTicketMergeAndValidate(
 ParentPT,
 PartPT)
    {
        // Entries in the Part PrintTicket 
        // take precedence over the corresponding entries 
        // in the Parent PrintTicket
    }
};