Объединение билетов на печать
Внимание
Современная платформа печати — это предпочтительный способ взаимодействия с принтерами 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
}
};