Partager via


Fichier de configuration du pipeline de filtre

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.

Le fichier de configuration du filtre pipeline est un fichier XML qui définit les éléments suivants :

  • Ordre des filtres dans le pipeline. Cet ordre est défini par l’ordre des éléments XML dans le fichier de configuration du filtre pipeline.

  • Interfaces des filtres. Ces interfaces sont définies par les attributs XML dans le fichier de configuration du filtre pipeline.

  • Formats d’entrée et de sortie pour chaque filtre. Ces formats sont définis par les éléments XML dans le fichier de configuration du filtre pipeline.

L’exemple de code suivant montre un fichier de configuration typique du filtre pipeline :

<Filters>
    <Filter      dll="XDWMark.dll"
 clsid="{D647D658-BEF6-415f-AFAC-070D64074C5D}"
                name="Watermark filter">
        <Input  guid="{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
        <Output guid="{4368d8a2-4181-4a9f-b295-3d9a38bb9ba0}" comment="IID_IXpsDocumentConsumer"/>
    </Filter>
 <Filter dll="XDScale.dll"
 clsid="{B9B52406-92D3-4721-86E6-3CF78F6D5FC5}"
 name="Page Scaling filter">
 <Input guid="{4d47a67c-66cc-4430-850e-daf466fe5bc4}" comment="IID_IPrintReadStream"/>
 <Output guid="{65bb7f1b-371e-4571-8ac7-912f510c1a38}" comment="IID_IPrintWriteStream"/>
 </Filter>
    <Filter      dll="XDColMan.dll"
 clsid="{8E56FC37-0799-447e-A643-16F4FB18244C}"
 name="Colour Management filter">
         <Input guid="{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
        <Output guid="{4368d8a2-4181-4a9f-b295-3d9a38bb9ba0}" comment="IID_IXpsDocumentConsumer"/>
    </Filter>
    <Filter      dll="XDBook.dll"
 clsid="{7DFC96C6-CEA2-46d8-B354-887C47B7986D}"
                name="Booklet filter">
         <Input guid="{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
        <Output guid="{4368d8a2-4181-4a9f-b295-3d9a38bb9ba0}" comment="IID_IXpsDocumentConsumer"/>
    </Filter>
    <Filter      dll="XDNUp.dll"
 clsid="{1b5bee16-511c-440f-8017-2123f481091a}"
                name="NUp filter">
         <Input guid="{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
        <Output guid="{4368d8a2-4181-4a9f-b295-3d9a38bb9ba0}" comment="IID_IXpsDocumentConsumer"/>
    </Filter>
</Filters>

Mots-clés privés

Un module de configuration XPSDrv peut placer des mots-clés privés dans l’entrée PrintTicket lorsqu’il traite un événement de document du pilote XPS lors d’un appel de fonction DrvDocumentEvent. Ces entrées PrintTicket sont ensuite lues par les filtres de traitement dans le filtre pipeline d’impression pendant que les filtres lisent le PrintTicket.

Conteneur des propriétés du filtre pipeline

Un module de configuration peut également utiliser le conteneur des propriétés du filtre pipeline pour stocker des données ou transmettre des informations à un filtre pipeline. Pour exposer des services de configuration en utilisant le conteneur des propriétés, le module de configuration doit exporter la méthode DrvPopulateFilterServices. En outre, le fichier de configuration du filtre pipeline doit inclure l’élément <FilterServiceProvider> pour chaque service. Le module fournisseur doit implémenter et exporter la fonction DllCanUnloadNow. Typiquement, ces fournisseurs publient des interfaces COM dans le conteneur des propriétés. Le fournisseur doit rester chargé tant que ces interfaces sont utilisées.

Un autre élément, <OptionalFilterServiceProvider>, permet au gestionnaire de pipeline de poursuivre le travail d’impression si le fournisseur de services dll n’est pas disponible. Les filtres individuels doivent définir leur comportement en l’absence du fournisseur de services optionnel. Sinon, si l’élément <FilterServiceProvider> est utilisé et que le dll ne peut être chargé, le travail échoue. L’élément <OptionalFilterServiceProvider> est pris en charge sous Windows 7 et les versions ultérieures.

L’exemple de code suivant montre la fonction DrvPopulateFilterServices :

HRESULT
DrvPopulateFilterServices(
    __in IPrintPipelinePropertyBag  *pPropertyBag
    );

Pour plus d’informations sur la fonction précédente, veuillez consulter la section DrvPopulateFilterServices.

L’exemple de code suivant montre la syntaxe XML pour l’élément <FilterServiceProvider> dans le fichier de configuration du filtre pipeline :

<Filters>
    <Filter ... />
    <FilterServiceProvider dll = "providerA.dll"/>
    <FilterServiceProvider dll = "providerB.dll"/>
</Filters>

Mode d’entrelacement pour le périphérique de sortie

L’entrelacement se réfère à la manière dont les parties de ressources individuelles d’un document XPS sont diffusées avec les parties du document FixedPage. Lorsque le filtre pipeline crée le modèle d’objet du document XPS pour le premier filtre avec les interfaces de document XPS dans le pipeline, l’ordre d’entrelacement du fichier de spool XPS n’est plus suivi. Cependant, le dernier filtre dans le pipeline qui utilise l’interface de document XPS peut spécifier un ordre d’entrelacement dans le fichier de configuration du filtre pour que le pipeline l’utilise lors de la sérialisation du contenu XPS. La sélection de l’ordre d’entrelacement le plus compatible avec un périphérique de sortie ou un fichier de sortie peut améliorer les performances du traitement de document ultérieur.

L’exemple de filtre suivant est un extrait de l’exemple précédent de fichier de configuration de filtre qui a été modifié pour montrer comment utiliser l’option d’entrelacement. Bien que cet exemple montre les deux options d’entrelacement à des fins d’illustration, un vrai fichier de configuration de filtre ne contient qu’un seul élément <Interleaving> dans la définition du filtre :

    <Filter     dll="XDNUp.dll"
      clsid="{1b5bee16-511c-440f-8017-2123f481091a}"
        name="NUp filter">
      <Input guid="{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
       <Output guid="{4368d8a2-4181-4a9f-b295-3d9a38bb9ba0}" comment="IID_IXpsDocumentConsumer"/>
     <Interleaving mode="ResourcesFirst"\>
     <Interleaving mode="MarkupFirst"\>
    </Filter>

Le filtre pipeline prend en charge les ordres d’entrelacement suivants :

  • L’ordre d’entrelacement ResourcesFirst diffuse chaque ressource dépendante avant le FixedPage qui en dépend. Cet ordre d’entrelacement est adapté aux pilotes d’imprimante et aux imprimantes à consommation directe, car il fournit les ressources de police et d’image dont l’imprimante a besoin pour rendre le texte et le contenu de la page juste avant le début du rendu.

  • L’ordre d’entrelacement MarkupFirst diffuse le texte du document, le balisage et les informations sur la manière dont une ressource sera utilisée avant de diffuser la ressource elle-même. Cet ordre d’entrelacement est optimal pour les destinations de fichiers d’archives et les applications qui affichent le document en ligne.

Sortie XPS optimisée pour l’archivage

Cette fonctionnalité permet aux pilotes d’impression de demander explicitement une sortie XPS optimisée pour l’archivage en tant que fichier de spool. Sous Windows 8, le Microsoft XPS Document Writer v4 (MXDW) produit cette sortie XPS prête pour l’archivage via un chemin de code qui est uniquement disponible pour MXDW dans le Microsoft XPS Document Converter (MXDC). Ainsi, un pilote d’impression peut générer cet XPS optimisé pour l’archivage à partir de MXDC.

L’exemple de code suivant montre la syntaxe XML pour utiliser l’élément <Archive> dans le fichier de configuration du filtre pipeline afin d’activer cette fonctionnalité :

<Filters>
    ...
    <Archive enabled="true"/>
</Filters>