Filter Pipeline Configuration File

Wichtig

Es wird empfohlen, den IPP-Klassentreiber von Microsoft zusammen mit Druckunterstützungs-Apps (PSA) zu verwenden, um die Druckoberfläche in Windows 10 und 11 für die Entwicklung von Druckergeräten anzupassen.

Weitere Informationen finden Sie im Leitfaden zum Erstellen von Druckunterstützungs-Apps.

Die Konfigurationsdatei der Filterpipeline ist eine XML-Datei, die Folgendes definiert:

  • Reihenfolge der Filter in der Pipeline. Diese Reihenfolge wird durch die Reihenfolge der XML-Elemente in der Konfigurationsdatei der Filterpipeline definiert.

  • Filterschnittstellen. Diese Schnittstellen werden durch XML-Attribute in der Konfigurationsdatei der Filterpipeline definiert.

  • Eingabe- und Ausgabeformate für jeden Filter. Diese Formate werden durch XML-Elemente in der Konfigurationsdatei der Filterpipeline definiert.

Das folgende Codebeispiel zeigt eine typische Konfigurationsdatei für die Filterpipeline:

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

Private Schlüsselwörter

Ein XPSDrv-Konfigurationsmodul kann private Schlüsselwörter in den PrintTicket-Eintrag einfügen, wenn es ein XPS-Treiberdokumentereignis während eines DrvDocumentEvent-Funktionsaufrufs verarbeitet. Diese PrintTicket-Einträge werden dann von den Verarbeitungsfiltern in der Druckfilterpipeline gelesen, während die Filter das PrintTicket lesen.

Filterpipeline-Eigenschaftenbehälter

Ein Konfigurationsmodul kann auch den Eigenschaftenbehälter der Filterpipeline verwenden, um Daten zu speichern oder Informationen an eine Filterpipeline zu übergeben. Um Konfigurationsdienste mithilfe des Eigenschaftenbehälters verfügbar zu machen, muss das Konfigurationsmodul die DrvPopulateFilterServices-Methode exportieren. Darüber hinaus muss die Konfigurationsdatei der Filterpipeline das <FilterServiceProvider-Element> für jeden Dienst enthalten. Das Anbietermodul muss die DllCanUnloadNow-Funktion implementieren und exportieren. In der Regel veröffentlichen diese Anbieter COM-Schnittstellen im Eigenschaftenbehälter. Der Anbieter muss geladen bleiben, während diese Schnittstellen verwendet werden.

Ein weiteres Element, <OptionalFilterServiceProvider>, ermöglicht es dem Pipeline-Manager, den Druckauftrag fortzusetzen, wenn die Dienstanbieter-DLL nicht verfügbar ist. Die einzelnen Filter müssen ihr Verhalten definieren, wenn kein optionaler Dienstanbieter vorhanden ist. Andernfalls schlägt der Auftrag fehl, wenn <FilterServiceProvider> verwendet wird und die DLL nicht geladen werden kann. Das <OptionalFilterServiceProvider-Element> wird in Windows 7 und höher unterstützt.

Das folgende Codebeispiel zeigt die DrvPopulateFilterServices-Funktion :

HRESULT
DrvPopulateFilterServices(
    __in IPrintPipelinePropertyBag  *pPropertyBag
    );

Weitere Informationen zur vorangehenden Funktion finden Sie unter DrvPopulateFilterServices.

Das folgende Codebeispiel zeigt die XML-Syntax für das <FilterServiceProvider-Element> in der Konfigurationsdatei der Filterpipeline:

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

Interleaving-Modus für das Ausgabegerät

Interleaving bezieht sich darauf, wie die einzelnen Ressourcenteile eines XPS-Dokuments zusammen mit den FixedPage-Dokumentteilen gestreamt werden. Wenn die Filterpipeline das XPS-Dokumentobjektmodell für den ersten Filter mit XPS-Dokumentschnittstellen in der Pipeline erstellt, wird die Verschachtelungsreihenfolge der XPS-Spooldatei nicht mehr befolgt. Der letzte Filter in der Pipeline, die die XPS-Dokumentschnittstelle verwendet, kann jedoch eine überlappende Reihenfolge in der Filterkonfigurationsdatei für die Pipeline angeben, die beim Serialisieren des XPS-Inhalts verwendet werden soll. Wenn Sie die Verschachtelungsreihenfolge auswählen, die am besten mit einem Ausgabegerät oder einer Ausgabedatei kompatibel ist, kann die Leistung der nachfolgenden Dokumentverarbeitung verbessert werden.

Der folgende Beispielfilter ist ein Auszug aus der vorherigen Beispielfilterkonfigurationsdatei, die geändert wurde, um zu zeigen, wie die Interleaving-Option verwendet wird. Obwohl in diesem Beispiel beide Verschachtelungsoptionen zu Veranschaulichungszwecken gezeigt werden, enthält eine echte Filterkonfigurationsdatei nur ein <Interleaving-Element> in der Filterdefinition:

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

Die Filterpipeline unterstützt die folgenden Verschachtelungsaufträge:

  • Die ineinandergreifende Reihenfolge resourcesFirst streamt jede abhängige Ressource vor der FixedPage, die von der Ressource abhängt. Diese Verschachtelungsreihenfolge eignet sich gut für Druckertreiber und Drucker mit direktem Verbrauch, da sie die Schriftart- und Bildressourcen bereitstellt, die der Drucker zum Rendern von Text und Seiteninhalt unmittelbar vor Beginn des Renderings benötigt.

  • Die Ineinandergreifende MarkupFirst-Reihenfolge streamt den Dokumenttext und das Markup sowie die Informationen darüber, wie eine Ressource verwendet wird, bevor sie die tatsächliche Ressource streamt. Diese Verschachtelungsreihenfolge eignet sich am besten für Archivdateiziele und Anwendungen, die das Dokument online anzeigen.

Archive-Optimized XPS-Ausgabe

Dieses Feature ermöglicht es Drucktreibern, die archivoptimierte XPS-Ausgabe explizit als Spooldatei anzufordern. In Windows 8 erzeugt der Microsoft XPS Document Writer v4 (MXDW) diese archivbereite XPS-Ausgabe über einen Codepfad, der nur für MXDW im Microsoft XPS Document Converter (MXDC) verfügbar ist. So kann ein Drucktreiber dieses archivoptimierte XPS aus MXDC generieren.

Das folgende Codebeispiel zeigt die XML-Syntax für die Verwendung des <Archive-Elements> in der Konfigurationsdatei der Filterpipeline, um dieses Feature zu aktivieren:

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