Condividi tramite


Unione di ticket di stampa

Importante

È consigliabile usare il driver di classe IPP di Microsoft, insieme a Print Support Apps (PSA), per personalizzare l'esperienza di stampa in Windows 10 e 11 per lo sviluppo di dispositivi stampanti.

Per altre informazioni, vedere la guida alla progettazione dell'app di supporto stampa.

Gli oggetti PrintTicket elaborati nel driver di stampa hanno una relazione gerarchica in base alla parte del documento associata. Il diagramma seguente illustra la relazione di queste parti all'interno di un documento XPS.

diagramma che illustra le parti del documento in un documento xps.

Ognuno dei livelli di ticket di stampa nella gerarchia ha un ambito diverso. I moduli di filtro driver di stampa che usano le informazioni sul ticket di stampa devono mantenere tale ambito come gli oggetti Print Ticket vengono letti dal flusso di documenti. Il diagramma seguente illustra come eseguire questa operazione in un modulo di filtro driver di stampa.

diagramma che illustra come i diversi livelli di ticket di stampa vengono uniti logicamente .

Man mano che le parti del documento vengono letti dal filtro, gli oggetti Print Ticket vengono letti, uniti e convalidati e memorizzati nella cache dal filtro per configurare il modo in cui il filtro elabora ogni parte del documento. Il diagramma precedente illustra in che modo i diversi livelli di ticket di stampa vengono uniti logicamente e il codice pseudo riportato di seguito illustra come può essere implementata questa unione.

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