Fichier de configuration du pipeline de filtre

Important

Nous vous recommandons d’utiliser le pilote de classe de boîte de réception IPP 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 d’appareils d’imprimante.

Pour plus d’informations, consultez le guide de conception d’application de prise en charge de l’impression.

Le fichier de configuration du pipeline de filtre 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 pipeline de filtre.

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

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

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

<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 gère un événement de document de pilote XPS pendant un appel de fonction DrvDocumentEvent . Ces entrées PrintTicket sont ensuite lues par les filtres de traitement dans le pipeline de filtre d’impression pendant que les filtres lisent le PrintTicket.

Filter Pipeline Property Bag

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

Un autre élément, <OptionalFilterServiceProvider>, permet au gestionnaire de pipeline de continuer le travail d’impression si la dll du fournisseur de services n’est pas disponible. Les filtres individuels doivent définir leur comportement en l’absence du fournisseur de services facultatif. Sinon, si <FilterServiceProvider> est utilisé et que la dll ne peut pas être chargée, le travail échoue. L’élément <OptionalFilterServiceProvider> est pris en charge dans Windows 7 et 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, consultez DrvPopulateFilterServices.

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

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

Mode d’entrelacement pour l’appareil de sortie

L’entrelacement fait référence à la façon dont les parties de ressources individuelles d’un document XPS sont diffusées en continu avec les parties de document FixedPage. Lorsque le pipeline de filtre crée le modèle objet de document XPS pour le premier filtre avec des interfaces de document XPS dans le pipeline, l’ordre d’entrelacement du fichier de spouleur XPS n’est plus suivi. Toutefois, le dernier filtre du pipeline qui utilise l’interface de document XPS peut spécifier un ordre d’entrelacement dans le fichier de configuration du filtre que le pipeline doit utiliser lorsqu’il sérialise le contenu XPS. La sélection de l’ordre d’entrelacement qui est 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 fichier de configuration de filtre réel n’a qu’un <seul élément d’entrelacement> dans la définition de 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 pipeline de filtre prend en charge les ordres d’entrelacement suivants :

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

  • L’ordre d’entrelacement MarkupFirst diffuse le texte et le balisage du document, ainsi que les informations sur la façon dont une ressource sera utilisée avant qu’elle ne diffuse la ressource réelle. Cet ordre d’entrelacement est idéal pour les destinations de fichiers d’archivage et pour les applications qui affichent le document en ligne.

Archive-Optimized sortie XPS

Cette fonctionnalité permet aux pilotes d’impression de demander explicitement une sortie XPS optimisée pour l’archive en tant que fichier de pool. Dans Windows 8, l’enregistreur de documents Microsoft XPS v4 (MXDW) produit cette sortie XPS prête pour l’archivage via un chemin de code disponible uniquement pour MXDW dans le convertisseur de documents Microsoft XPS (MXDC). Ainsi, un pilote d’impression peut générer ce XPS optimisé pour les archives à partir de MXDC.

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

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