Treiberunterstützung für OpenXPS
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.
OpenXPS ist das Open XML Paper Specification-Format für Dokumente und basiert auf der Ecma International-Standardspezifikation.
Die aktuellsten Informationen zu dieser Spezifikation finden Sie unter Open XML Paper Specification.
Windows 8 bietet vollständige Unterstützung für OpenXPS, parallel mit fortgesetzter Unterstützung für das vorhandene Microsoft XPS-Format. Dieses Thema konzentriert sich auf die Unterstützung von OpenXPS über das v4-Treibermodell. Informationen zur OpenXPS-Unterstützung, die für Entwickler von Windows-Anwendungen relevant ist, finden Sie unter App-Unterstützung für OpenXPS-Druck.
Der Windows-Druckpfad wurde entwickelt, um sicherzustellen, dass das übermittelte XPS-Format einem unterstützten Format des zielbezogenen Drucktreibers entspricht und Formate bei Bedarf konvertiert. Windows stellt auch APIs zum Abfragen des Drucktreibers bereit, sodass die Anwendung kompatible Elemente bereitstellen und eine zusätzliche Konvertierung innerhalb des Drucksystems vermeiden kann.
Ein Drucktreiber kann sein Manifest verwenden, um anzugeben, ob er Microsoft XPS, Open XPS oder beide Formate unterstützt. Entweder Microsoft XPS oder OpenXPS können den Filtern in der Druckfilterpipeline mit den vorhandenen Datenstrom- und Objektmodellschnittstellen (OM) angezeigt werden. Es sind keine neuen Schnittstellen erforderlich, die von Treibern zur Unterstützung von OpenXPS benötigt werden. Das Format, das den Filtern angezeigt wird, hängt vom Format ab, das vom Treiber unterstützt wird, oder vom von der Anwendung bereitgestellten Format.
Der Microsoft XPS Document Writer (MXDW) wurde aktualisiert, damit MXDW entweder Microsoft XPS oder OpenXPS aus einer beliebigen Windows-Desktopanwendung ausgeben kann. Ebenso kann der Microsoft XPS Viewer und die Reader-App in Windows 8 beide XPS-Formate öffnen. Bei Bedarf können Benutzer vom XPS Viewer in MXDW drucken, um Formate zu konvertieren.
Einige Legacyfunktionen werden entweder nicht unterstützt oder bieten eine herabgestufte Erfahrung bei Verwendung mit OpenXPS.
Nicht-unterstützt: Das direkte Senden von OpenXPS-Dateien an den Spooler (Umgehung der XPS-Druck-API) ist ein nicht unterstütztes Szenario. Dadurch werden die folgenden Funktionalitätsprobleme auftreten:
XPS-Spooldateien, die direkt an den Spooler gesendet werden, werden als MSXPS behandelt und entsprechend behandelt.
Die Ergebnisse des direkten Sendens einer OpenXPS-Datei an den Spooler sind nicht definiert und führen wahrscheinlich dazu, dass der Druckauftrag fehlschlägt.
Hinweis: Es gibt keine Pläne, eine Unterstützung für dieses Szenario bereitzustellen.
Nicht empfohlen: Das Direkte Senden eines OpenXPS-Datenstroms von einer Anwendung an die XPS-Druck-API ist keine empfohlene Technik. Senden Sie beispielsweise keinen OpenXPS-Stream direkt an die StartXPSPrintJob-Methode. Wenn Sie dies tun, kann die resultierende Konvertierung von einem Geschmack von XPS in einen anderen als Stream sehr teuer für die Leistung sein.
Stattdessen sollten Sie IPrintDocumentPackageTarget verwenden, um den Druckauftrag als XPS-OM zu übermitteln, um Leistungsbeeinträchtigungen zu vermeiden.
Nicht empfohlen: Senden einer XPS-Spooldatei direkt an den Spooler. Wenn Sie dies tun, findet das Drucksystem nicht die erforderlichen Metadaten, die von den Druckpfad-APIs hinzugefügt werden, vorausgesetzt, das Format ist MSXPS, und versucht, es in OpenXPS zu konvertieren. Wenn es sich bei der direkt an den Spooler gesendeten Spooldatei um eine openXPS-formatierte Datei handelt, hat der Versuch der Druckfilterpipeline, sie in OpenXPS zu konvertieren, nicht definierte Ergebnisse. Wenn die an den Spooler gesendete Datei eine MSXPS-formatierte Datei war und der Treiber ein OpenXPS-only-Treiber ist, ist die Konvertierung durch die Druckfilterpipeline in OpenXPS erfolgreich. Diese Konvertierung in der späten Phase führt jedoch zu einem erheblichen Verlust der Drucksystemleistung.
Informationen zu den Auswirkungen auf App-Entwickler in Bezug auf die Windows 8-Unterstützung für OpenXPS finden Sie unter App-Support für OpenXPS Printing.
Im Folgenden sind die grundlegenden Schritte zum Aktivieren von OpenXPS in einem v4-Drucktreiber aufgeführt:
Treibermanifest: Fügen Sie "OpenXPS" zum Abschnitt "Treiberrenderung" hinzu.
Treibermanifest: Fügen Sie ggf. "Oxps" zum FileSave-Abschnitt hinzu.
Filterpipeline: Aktualisieren von Druckfiltern zum Verarbeiten von OpenXPS-Elementen.
Für einen bestimmten Datenstrom und mit den entsprechenden Objektschnittstellen kann ein Client das OpenXPS-Format verwenden, um Daten an die Filter in der Druckfilterpipeline zu übertragen. Zum Übertragen eines Datenstroms verwendet der Client die Schnittstellen IID_IPrintReadStream und IID_IPrintWriteStream. Um Daten an eine OM-Komponente zu übertragen, verwendet der Client die Schnittstellen IID_IXpsDocumentProvider und IID_IXpsDocumentConsumer. Treiber, die die Unterstützung für OpenXPS deklarieren, müssen sicherstellen, dass die bereitgestellten Druckfilter das OpenXPS-Format ordnungsgemäß verarbeiten können, wenn dieses Format vom Pipeline-Manager empfangen wird.
Treibermanifest: DriverRender-Abschnitt. Während der Treiberinstallation überprüft der Setupvorgang den DriverRender-Abschnitt des Manifests, um festzustellen, ob der XpsFormat-Eintrag OpenXPS enthält. Der XpsFormat-Eintrag kann sowohl XPS (für Microsoft XPS) als auch OpenXPS enthalten, um die duale Unterstützung anzugeben. Die Reihenfolge, in der die beiden Formate im XpsFormat-Eintrag aufgeführt sind, bestimmt das bevorzugte Format für den Treiber.
Hier sind einige Beispiele für das Aktualisieren des DriverRender-Abschnitts.
Gibt nur die Unterstützung für OpenXPS an:
[DriverRender]
XpsFormat = OpenXPS
Gibt nur die Unterstützung für MSXPS an:
[DriverRender]
XpsFormat = XPS
Gibt die Unterstützung für beide Formate mit einer Einstellung für OpenXPS an:
[DriverRender]
XpsFormat = OpenXPS,XPS
Gibt die Unterstützung für beide Formate mit einer Einstellung für MSXPS an:
[DriverRender]
XpsFormat = XPS,OpenXPS
Der Treiberentwickler bestimmt das bevorzugte Format für seinen V4-Drucktreiber, und diese Entscheidung basiert auf der Funktionalität, die der Treiber bereitstellen soll. Beispielsweise könnte ein Drucktreiber entwickelt werden, um JPEG XR-Unterstützung für hochauflösende Bilder bereitzustellen.
Das Drucksystem trifft verschiedene Entscheidungen basierend auf den DriverRender-Informationen im Manifest. Hier folgen einige Beispiele für diese Entscheidungen.
GDI-basierte Druckaufträge, die an v4-Treiber gesendet werden
Der Microsoft XPS-Dokumentkonverter (MXDC) verwendet GDI-Druckauftragseingaben und konvertiert den Auftrag in eine XPS-Spooldatei. Das Format dieser Spooldatei stimmt mit dem bevorzugten XPS-Format überein, das im DriverRender-Abschnitt des Manifests angegeben ist.
XPS Print API-Formatkonvertierung
Die XPS-Druck-API fragt unterstützte XPS-Formate für den Zieltreiber ab. Wenn der Treiber beide Formate unterstützt, übergibt die XPS-Druck-API den XPS-Druckauftrag an den Spooler AS SUBMITTED von der Anwendung. Es wird keine Konvertierung durchgeführt.
Wenn der Zieltreiber nur ein oder das andere Format unterstützt, wird der Auftrag vor dem Spooling in das richtige Format konvertiert.
Wenn kein XpsFormat im Manifest bereitgestellt wird, wird das Verhalten nur für MSXPS verwendet. Die OpenXPS-Eingabe wird in MSXPS konvertiert. Dieses Verhalten bietet die stärkste Abwärtskompatibilität für Treiber.
XPS-Dateien, die direkt an den Spooler gesendet werden
XPS-Dateien, die direkt an den Spooler gesendet werden, sind standardmäßig MSXPS. Das Direkte Übermitteln von OpenXPS an den Spooler wird nicht unterstützt. Allerdings hat .NET vor 4.5+ seine eigenen MSXPS serialisiert und den Auftrag direkt an den Spooler übermittelt. Dieses Verhalten wurde vor der Einführung der XPS-Druck-API (xpsprint.dll) implementiert.
Um die Abwärtskompatibilität für diese .NET-Anwendungen zu gewährleisten, überprüft der Druckfilterpipeline-Manager die Spooldatei, um zu ermitteln, ob sie direkt-zu-Spooler empfangen wurde. Wenn ja, wird davon ausgegangen, dass sie MSXPS ist. Der Druckfilterpipeline-Manager fragt an diesem Punkt die XPS-Formate des Treibers ab. Wenn der Treiber MSXPS unterstützt, wird keine Konvertierung ausgeführt. Wenn der Treiber nur OpenXPS unterstützt, führt der Druckfilterpipeline-Manager eine Konvertierung der Datei durch. Die Konvertierung an diesem Punkt im Auftrag ist leistungsintensiv; Es stellt jedoch sicher, dass ältere .NET-Apps in der Lage sind, auf neue v4 OpenXPS-Treiber zu drucken.
Treibermanifest: FileSave-Abschnitt. Im Abschnitt "FileSave" des v4-Drucktreibermanifests werden Erweiterungen für das Dialogfeld "Datei speichern " bereitgestellt, das vom PORTPROMPT: Port verwendet wird. (PORTPROMPT: sollte anstelle von FILE verwendet werden: in Windows 8.1, da PORTPROMPT: Benutzern den Zugriff auf alle Dateispeicherorte ermöglicht, auf die sie Rechte haben, auch wenn die Anwendung im Modus mit niedrigen Rechten ausgeführt wird.) Die Einträge im FileSave-Abschnitt sind den Einträgen im DriverRender-Abschnitt nach Index zugeordnet.
Beispiel:
[FileSave]
xps=0
oxps=0
[DriverRender]
XpsFormat=XPS,OpenXPS
Dadurch wird sichergestellt, dass, wenn der Benutzer einen Druckauftrag an diesen Treiber sendet und der Port auf PORTPROMPT festgelegt ist: Im Dialogfeld "Datei speichern " werden XPS und OpenXPS als Dateitypoptionen im Dialogfeld angezeigt und XPS bzw. OXPS als Dateierweiterung angewendet.
Weitere Informationen zu anderen Optionen für den Abschnitt "Dateispeichern" des Manifests finden Sie unter V4-Treibermanifest.