OpenXPS 的驅動程序支援
重要
新式列印平臺是 Windows 與印表機通訊的慣用方法。 我們建議您使用Microsoft的 IPP 收件匣類別驅動程式,以及列印支援應用程式 (PSA),自定義 Windows 10 和 11 中的列印體驗,以進行印表機裝置開發。
如需詳細資訊,請參閱 新式列印平臺 和 列印支援應用程式設計指南。
OpenXPS 是檔的 Open XML 紙張規格格式,而且是以 Ecma 國際標準規格為基礎。
如需此規格的最新資訊,請參閱 Open XML Paper Specification。
Windows 8 提供 OpenXPS 的完整支援,並存支援現有 Microsoft XPS 格式。 本主題著重於透過 v4 驅動程式模型支援 OpenXPS。 如需與 Windows 應用程式開發人員相關的 OpenXPS 支援,請參閱 OpenXPS 列印的應用程式支援。
支援的 OpenXPS 案例
已開發 Windows 列印路徑,以確保提交的 XPS 格式符合目標列印驅動程式支援的格式,並視需要轉換格式。 Windows 也提供 API 來查詢列印驅動程式,讓應用程式可以提供相容的元素,並避免在列印系統中進行任何其他轉換。
列印驅動程式可以使用其指令清單來指出它是否支援Microsoft XPS、Open XPS 或兩種格式。 Microsoft XPS 或 OpenXPS 可以使用現有的數據流和物件模型 (OM) 介面,向列印篩選管線中的篩選呈現 –驅動程式不需要任何新的介面來支援 OpenXPS。 呈現至篩選的格式取決於驅動程式所支援的格式,或應用程式所提供的格式。
Microsoft XPS 檔案寫入器 (MXDW) 已更新,以允許 MXDW 從任何 Windows 桌面應用程式輸出Microsoft XPS 或 OpenXPS。 同樣地,Windows 8 中的Microsoft XPS 查看器和讀取器應用程式可以開啟這兩種 XPS 格式。 如有需要,使用者可以從 XPS 查看器列印到 MXDW,以便轉換格式。
不支援的 OpenXPS 案例
不支援某些舊版功能,或搭配 OpenXPS 使用時提供降級體驗。
不支援:將 OpenXPS 檔案直接傳送至多任務緩衝處理程式(略過 XPS 列印 API)是不支援的案例。 這樣做會產生下列功能問題:
直接傳送至多任務緩衝處理程式的 XPS 多任務緩衝處理檔案將會被視為 MSXPS,並據以處理。
將OpenXPS檔案直接傳送至多任務緩衝處理程式的結果未定義,而且可能會導致列印作業失敗。
注意 沒有計劃提供此案例的支援。
不建議:不建議將 OpenXPS 數據流從應用程式直接傳送至 XPS 列印 API,這不是建議的技術。 例如,請勿將 OpenXPS 數據流直接傳送至 StartXPSPrintJob 方法。 如果您這樣做,從某個 XPS 類別轉換成另一個類別所產生的轉換,對於效能而言可能非常昂貴。
相反地,您應該使用 IPrintDocumentPackageTarget 將列印作業提交為 XPS OM,以避免效能降低。
不建議:將 XPS 多任務緩衝處理檔案直接傳送至多任務緩衝處理程式。 如果您這樣做,列印系統將找不到列印路徑 API 新增的必要元數據、假設格式為 MSXPS,而且會嘗試將它轉換成 OpenXPS。 如果直接傳送至多任務緩衝處理程式的多任務緩衝處理檔案是 OpenXPS 格式的檔案,列印篩選管線嘗試將它「轉換成 OpenXPS」將會有未定義的結果。 如果傳送至多任務緩衝處理程式的檔案是 MSXPS 格式的檔案,而驅動程式是僅限 OpenXPS 的驅動程式,則列印篩選管線轉換至 OpenXPS 將會成功。 但是這個後期轉換會導致列印系統效能大幅下降。
對應用程式開發人員的影響
如需有關適用於OpenXPS之 Windows 8 支援之應用程式開發人員影響的資訊,請參閱 OpenXPS 列印的應用程式支援。
對驅動程式開發人員的影響
以下是在 v4 列印驅動程式中啟用 OpenXPS 的基本步驟:
驅動程式指令清單:將 「OpenXPS」 新增至驅動程序轉譯區段。
驅動程式指令清單:如果適用,請將 「oxps」 新增至 FileSave 區段。
篩選管線:更新列印篩選以處理 OpenXPS 元素。
針對指定的數據流,以及使用適當的物件介面,用戶端可以使用 OpenXPS 格式將數據傳送至列印篩選管線中的篩選。 若要傳輸數據流,用戶端會使用IID_IPrintReadStream和IID_IPrintWriteStream介面。 若要將數據傳輸到 OM 元件,用戶端會使用IID_IXpsDocumentProvider和IID_IXpsDocumentConsumer介面。 宣告對 OpenXPS 支援的驅動程式必須確保提供的列印篩選可以在從管線管理員收到此格式時正確處理 OpenXPS 格式。
驅動程式指令清單:DriverRender 區段。 在驅動程式安裝期間,安裝程式會檢查指令清單的 DriverRender 區段,以查看 XpsFormat 專案是否包含 OpenXPS。 XpsFormat 專案可以同時包含 XPS(適用於 Microsoft XPS)和 OpenXPS,以表示雙重支援。 XpsFormat 專案中列出這兩種格式的順序會決定驅動程式的慣用格式。
以下是如何更新 DriverRender 區段的一些範例。
表示僅支援 OpenXPS:
[DriverRender]
XpsFormat = OpenXPS
表示僅支援 MSXPS:
[DriverRender]
XpsFormat = XPS
表示支援這兩種格式,並具有 OpenXPS 的喜好設定:
[DriverRender]
XpsFormat = OpenXPS,XPS
表示支援這兩種格式,並喜好設定 MSXPS:
[DriverRender]
XpsFormat = XPS,OpenXPS
驅動程式開發人員會決定其 V4 列印驅動程式的慣用格式,而此決策是以驅動程式設計來提供的功能為基礎。 例如,可以開發列印驅動程式,以提供高逼真度影像的 JPEG XR 支援。
列印系統會根據指令清單中的 DriverRender 資訊做出各種決策。 以下是這些決策的一些範例:
以 GDI 為基礎的列印作業傳送至 v4 驅動程式
Microsoft XPS 檔案轉換器 (MXDC) 會接受 GDI 列印作業輸入,並將作業轉換成 XPS 多任務緩衝處理檔案。 該多任務緩衝處理檔案的格式會符合指令清單之 DriverRender 區段中所表示的慣用 XPS 格式。
XPS 列印 API 格式轉換
XPS 列印 API 會查詢目標驅動程式支援的 XPS 格式。 如果驅動程式支援這兩種格式,XPS 列印 API 會將 XPS 列印作業傳遞至應用程式所提交的多任務緩衝處理程式。 不會執行轉換。
如果目標驅動程式只支援一或另一種格式,則工作將會在多任務緩衝處理之前轉換成正確的格式。
如果指令清單中未提供 XpsFormat,則行為只會預設為 MSXPS。 OpenXPS 輸入將會轉換成 MSXPS。 此行為提供驅動程式最強的回溯相容性。
直接傳送至多任務緩衝處理程式的 XPS 檔案
傳送至多任務緩衝處理程式的 XPS 檔案預設為 MSXPS。 不支援將 OpenXPS 直接提交至多任務緩衝處理程式。 不過,在 4.5+ 之前.NET 已串行化自己的 MSXPS,並將作業直接提交至多任務緩衝處理程式。 在引進 XPS 列印 API 之前,已實作此行為(xpsprint.dll)。
為了提供這些 .NET 應用程式的回溯相容性,列印篩選管線管理員會檢查多任務緩衝處理檔案,以判斷是否已收到直接到多任務緩衝處理程式。 如果是,則會假設為 MSXPS。 列印篩選管線管理員會在該時間點查詢驅動程式的 XPS 格式。 如果驅動程序支援 MSXPS,則不會執行任何轉換。 如果驅動程式僅支援 OpenXPS,列印篩選管線管理員將會執行檔案轉換。 作業此時的轉換效能昂貴;不過,它可確保舊版 .NET 應用程式能夠列印到新的 v4 OpenXPS 驅動程式。
驅動程式指令清單:FileSave 區段。 v4 列印驅動程式指令清單的 FileSave 區段提供 PORTPROMPT: port 所使用的 [ 檔案儲存 ] 對話框的擴展名。 (PORTPROMPT:應該用於取代 FILE:在 Windows 8.1 中,因為 PORTPROMPT: 會允許使用者存取他們擁有許可權的所有檔案位置,即使應用程式是以低許可權模式執行也一樣。FileSave 區段中的專案會依索引與 DriverRender 區段中的專案相關聯。
範例:
[FileSave]
xps=0
oxps=0
[DriverRender]
XpsFormat=XPS,OpenXPS
這可確保當使用者將列印作業傳送至此驅動程式,並將埠設定為 PORTPROMPT:時,[ 檔案儲存 ] 對話方塊會在對話框中將 XPS 和 OpenXPS 顯示為檔案類型選項,並將 .xps 或 .oxps 分別套用為擴展名。
如需指令清單之 [檔案儲存] 區段之其他選項的詳細資訊,請參閱 V4 驅動程式指令清單。