Filter Pipeline Configuration File

Wichtig

Die moderne Druckplattform ist die bevorzugte Methode von Windows für die Kommunikation mit Druckern. Wir empfehlen die Verwendung des Microsoft IPP-Treibers für die Posteingangsklasse zusammen mit Print Support Apps (PSA), um das Druckverhalten in Windows 10 und 11 für die Entwicklung von Druckergeräten anzupassen.

Weitere Informationen finden Sie unter Moderne Druckplattform und im Designhandbuch für die Drucksupport-App.

Die Konfigurationsdatei für die Filterpipeline ist eine XML-Datei, die Folgendes definiert:

  • Reihenfolge der Filter in der Pipeline. Diese Reihenfolge wird durch die Sortierung 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 während eines DrvDocumentEvent-Funktionsaufrufs ein XPS-Treiberdokumentereignis 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 Filterpipelinekonfigurationsdatei 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 der optionale Dienstanbieter nicht 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 vorherigen 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 überlappende Reihenfolge der XPS-Spooldatei nicht mehr befolgt. Der letzte Filter in der Pipeline, der 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. Die Auswahl der interleavierenden Reihenfolge, die am besten mit einem Ausgabegerät kompatibel ist, oder eine Ausgabedatei kann die Leistung der nachfolgenden Dokumentverarbeitung verbessern.

Der folgende Beispielfilter ist ein Auszug aus der vorherigen Beispielfilterkonfigurationsdatei, die geändert wurde, um zu veranschaulichen, wie die Interleaving-Option verwendet wird. Obwohl in diesem Beispiel beide Interleaving-Optionen für die Veranschaulichung gezeigt werden, weist eine echte Filterkonfigurationsdatei nur ein <Interleaving-Element> in der Filterdefinition auf:

    <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 überlappenden Bestellungen:

  • Interleaving ResourcesFirst überträgt jede abhängige Ressource vor der FixedPage, die von der Ressource abhängt. Diese Verlagerungsreihenfolge eignet sich gut für Druckertreiber und für Drucker mit direktem Verbrauch, da sie die Schriftart- und Bildressourcen bereitstellt, die der Drucker zum Rendern des Texts und des Seiteninhalts benötigt, bevor das Rendering beginnt.

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

Archivoptimierte XPS-Ausgabe

Mit diesem Feature können Drucktreiber die archivoptimierte XPS-Ausgabe explizit als Spooldatei anfordern. In Windows 8 erzeugt der Microsoft XPS Document Writer v4 (MXDW) diese archivfähige XPS-Ausgabe über einen Codepfad, der nur für MXDW im Microsoft XPS Document Converter (MXDC) verfügbar ist. Ein Drucktreiber kann also dieses archivoptimierte XPS aus MXDC generieren.

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

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