Compartilhar via


Fusão de tíquetes de impressão

Importante

A plataforma de impressão moderna é o meio preferido do Windows para se comunicar com as impressoras. Recomendamos que você use o driver de classe de caixa de entrada IPP da Microsoft juntamente com PSA (Aplicativos de Suporte à Impressão) para personalizar a experiência de impressão no Windows 10 e 11 para o desenvolvimento de dispositivos de impressora.

Para obter mais informações, consulte Plataformade impressão moderna e o Guia de design do aplicativo de suporte de impressão.

Os objetos PrintTicket processados no Driver de Impressão têm uma relação hierárquica com base na parte do documento à qual estão associados. O diagrama a seguir ilustra a relação dessas partes em um documento XPS.

diagrama que ilustra partes do documento em um documento XPS.

Cada um dos níveis de Tíquete de Impressão na hierarquia tem um escopo diferente. Os módulos de filtro do driver de impressão que usam as informações do tíquete de impressão devem manter esse escopo à medida que os objetos do tíquete de impressão são lidos do fluxo de documentos. O diagrama a seguir ilustra como isso pode ser feito em um módulo de filtro de driver de impressão.

Diagrama que ilustra como os diferentes níveis de tíquete de impressão são mesclados logicamente.

À medida que as partes do documento são lidas pelo filtro, os objetos Print Ticket são lidos, mesclados, validados e armazenados em cache pelo filtro para configurar como o filtro processará cada parte do documento. O diagrama anterior ilustra como os diferentes níveis de tíquete de impressão são mesclados logicamente e o pseudocódigo abaixo ilustra como essa mesclagem pode ser implementada.

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
    }
};