Freigeben über


Implementieren von XPS-Filtern

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.

Alle XPS-Filter müssen die IPrintPipelineFilter-Schnittstelle implementieren.

Während des Aufrufs der IPrintPipelineFilter::InitializeFilter-Methode sollte ein Filter:

  1. Zwischenspeichern Sie den Zeiger auf die IPrintPipelineManagerControl-Schnittstelle .

  2. Verarbeiten relevanter Daten in der IPrintPipelinePropertyBag-Schnittstelle .

  3. Rufen Sie die Methoden IInterFilterCommunicator::RequestReader und IInterFilterCommunicator::RequestWriter der Schnittstelle IInterfilterCommunicator (pIInterFilterCom) auf, um die Provider- und Consumerschnittstellen für den Filter zu initialisieren.

Wenn die Daten einen PrintTicket-Abschnitt enthalten, können Sie über die Microsoft Win32 PrintTicket- oder PrintCapabilities-API auf die Daten zugreifen. Bei UniDrv- und PScript5-Treibern, die auf XPSDrv basieren, können Filter zugriff auf den IPrintCoreHelper-Schnittstellenkern Unidrv- oder PScript5-Treiber als Konfigurationsdienst haben.

Filter können je nach Treiberdesign auch auf proprietäre Konfigurationsdaten über den Eigenschaftenbehälter zugreifen.

Der Interfilter Communicator ist Teil des Filterpipeline-Managers, der die Kommunikation zwischen Filtern in der Filterpipeline verarbeitet. Wenn der Filterpipeline-Manager einen Filter initialisiert, wird eine Interfilter Communicator-Schnittstelle (IInterFilterCommunicator) an den Filter übergeben, sodass der Filter die für diesen Filter definierten Lese- und Schreibschnittstellen abrufen kann.

Microsoft stellt die XPS-Dokument- und Datenstromschnittstellen zur Verfügung, aber Sie können eigene Interfilterschnittstellen erstellen, die für diesen Filter definiert sind. Microsoft stellt die folgenden Schnittstellen bereit:

  • Die XPS-Dokumentschnittstelle liest und schreibt aus verschiedenen Teilen einer XPS-Spooldatei.

  • Die XPS-Datenstromschnittstelle liest und schreibt einen seriellen Datenstrom. Sie können diese Schnittstelle verwenden, um die Seitenbeschreibungssprache (PDL) aus einem Filter in einen Drucker zu schreiben, der XPS nicht als PDL verwendet.

Filter müssen den Renderingregeln und PrintTicket-Verarbeitungsregeln entsprechen, die in der XML Paper Specification (XPS) definiert sind.

Filter dürfen nicht von der Microsoft .NET Common Language Runtime (CLR) oder den Microsoft WinFX-Runtime-Komponenten abhängen.

Filter in der Pipeline dürfen keine Benutzeroberflächeninhalte anzeigen.

Die folgenden Empfehlungen gelten für Filter:

  • Filter sollten keine separaten Prozesse oder Threads erstellen. Wenn ein separater Prozess oder Thread erforderlich ist, muss der Filter den Prozess oder die Threadlebensdauer ordnungsgemäß verwalten.

  • Filter sollten über isolierte Funktionen verfügen. Alle Funktionen und Implementierungen sollten modular sein. Entfernen Sie nach Möglichkeit alle Anordnungs- und Funktionsabhängigkeiten zwischen Filtern.

  • Filter sollten den Fall behandeln, in dem sie in der Pipeline nicht mehr in der Reihenfolge platziert werden. Wenn sich ein Filter nicht in der erwarteten Reihenfolge befindet, sollte er nicht abstürzen und die Situation ordnungsgemäß behandeln. Wenn ein Filter von einem anderen Filter abhängt, sollte er die Situation ordnungsgemäß behandeln, wenn die Abhängigkeit nicht bereitgestellt wird.

Weitere Informationen zum Hinzufügen asynchroner Benachrichtigungen zu Ihrem Filter finden Sie unter Asynchrone Benachrichtigungen in Druckfiltern.