Partager via


Fusion des tickets d’impression

Important

La plateforme d’impression moderne est le moyen privilégié de Windows pour communiquer avec les imprimantes. Nous vous recommandons d’utiliser le pilote de classe IPP en boîte de Microsoft, ainsi que les applications de support d’impression (PSA), pour personnaliser l’expérience d’impression dans Windows 10 et 11 pour le développement de périphériques d’impression.

Pour plus d’informations, veuillez consulter la section Plateforme d’impression moderne et le Guide de conception des applications de support d’impression.

Les objets PrintTicket traités dans le pilote d’impression ont une relation hiérarchique basée sur la partie du document à laquelle ils sont associés. Le diagramme suivant illustre la relation de ces parties au sein d’un document XPS.

diagramme illustrant les parties du document dans un document XPS.

Chacun des niveaux de Print Ticket dans la hiérarchie a une étendue différente. Les modules de filtre du pilote d’impression qui utilisent les informations du Print Ticket doivent maintenir cette étendue lorsque les objets Print Ticket sont lus à partir du flux de documents. Le diagramme suivant illustre comment cela peut être réalisé dans un module de filtre du pilote d’impression.

diagramme illustrant comment les différents niveaux de Print Ticket sont logiquement fusionnés.

Au fur et à mesure que les parties du document sont lues par le filtre, les objets Print Ticket sont lus, fusionnés, validés et mis en cache par le filtre pour configurer comment celui-ci traitera chaque partie du document. Le diagramme précédent illustre comment les différents niveaux de Print Ticket sont logiquement fusionnés et le pseudocode ci-dessous illustre comment cette fusion pourrait être mise en œuvre.

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