打印票证合并
重要
新式打印平台是 Windows 与打印机通信的首选方式。 建议使用 Microsoft 的 IPP 收件箱类驱动程序以及打印支持应用 (PSA) 来自定义 Windows 10 和 11 中的打印体验,以便进行打印机设备开发。
有关详细信息,请参阅新式打印平台和打印支持应用设计指南。
根据关联文档部分,在打印驱动程序中处理的 PrintTicket 对象具有分层关系。 下图说明了 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
}
};