Compartilhar via


Mesclagem de tíquete de impressão

Importante

Recomendamos que você use o driver de classe de caixa de entrada IPP da Microsoft, juntamente com o PSA (Aplicativos de Suporte para Impressão), para personalizar a experiência de impressão em Windows 10 e 11 para o desenvolvimento de dispositivos de impressora.

Para obter mais informações, consulte o Guia de design do aplicativo de suporte para 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 ilustrando partes do documento em um documento xps.

Cada um dos níveis do 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 ilustrando como os diferentes níveis de tíquete de impressão são logicamente mesclados.

À medida que as partes do documento são lidas pelo filtro, os objetos Print Ticket são lidos, mesclados e 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 logicamente mesclados 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
    }
};