Поделиться через


Объединение билетов на печать

Внимание

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