Condividi tramite


Unione di ticket di stampa

Importante

La piattaforma di stampa moderna è il mezzo preferito di Windows per comunicare con le stampanti. Ti consigliamo di 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 per stampanti.

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

Gli oggetti PrintTicket elaborati nel driver di stampa hanno una relazione gerarchica in base alla parte del documento a cui sono associati. 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.

Ogni livello di ticket di stampa nella gerarchia ha un ambito diverso. I moduli di filtro driver di stampa che utilizzano le informazioni sul ticket di stampa devono mantenere tale ambito perché gli oggetti Ticket di stampa 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 lette 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 il modo in cui i diversi livelli di ticket di stampa vengono uniti logicamente e lo pseudo codice riportato di seguito illustra come implementare 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
    }
};