共用方式為


OpenXPS 列印的應用程式支援

OpenXPS 是檔的 Open XML 紙張規格格式,它是以歐洲電腦製造商協會 (ECMA) 標準規格為基礎。

Windows 8 透過 v4 列印驅動程式模型提供 OpenXPS 列印的完整支援,同時並排支援 Microsoft XPS 格式。 本主題著重於與 Windows 應用程式開發人員相關的此支援部分。 如需 OpenXPS 支援的驅動程式需求相關信息,請參閱 OpenXPS 的驅動程式支援

將 XPS 資料傳送至列印系統

建議您使用 IPrintDocumentPackageTarget,將所有 XPS 列印作業傳送至列印系統。 IPrintDocumentPackageTarget 接受不串行化的 XPS 物件模型 (OM),這有助於改善整體效能。

以下是 IPrintDocumentPackageTarget 介面的簡短摘要:

  • 此介面支援從量身打造的解決方案以及桌面應用程式進行列印。

  • 針對桌面應用程式,這可用來取代 StartXpsPrintJob1

  • Windows 7 上提供 Service Pack 1 (SP1) + 平臺更新,以及 Windows 8。

  • 在專案中加入 DocumentTarget.h,以使用這些 API。

取用 OpenXPS 檔案的應用程式應該注意 OpenXPS 的 MIME 類型如下:

application\\oxps

將 OpenXPS 資料傳送至 XPS 列印 API

針對 OpenXPS,XPS OM 同時接受 MSXPS 和 OpenXPS,並提供將轉換和串行化為任一格式的方法。 這可讓應用程式開發人員在需要時不必受限於特定的驅動程式。 這也表示應用程式開發人員一律可以將列印作業作為 XPS OM 提交到 StartXpsPrintJob1 或 IDocumentPackageTarget,知道列印系統會處理任何必要的轉換。

當然,防止 XPS 格式之間的轉換可改善端對端效能。 開發人員可以從應用程式檢查下列登錄機碼,以判斷目標列印驅動程式的慣用XPS 格式:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\[PrintDriverName]\PrintDriverData\XpsFormat

判斷慣用 XPS 格式之後,應用程式可以提供不需要轉換的 XPS OM 物件。 在 MSXPS 中使用的特別值得注意的就是 HD Photo,在 OpenXPS 中則是 JPEGXR。 從 JPEGXR 轉換成 HD 相片相當輕量,因為此轉換的主要差異在於 HD 相片會忽略 JPEGXR 所需的 4 個控制位。 不過,從 HD Photo 轉換成 JPEGXR 需要重新編碼整個影像,才能產生所需的控制位。 因此,為高解析度影像提供 JPEGXR 映像可確保與 OpenXPS 的相容性,並將 MSXPS 映像的轉換成本降到最低。

Xpsobjectmodel_1.h 標頭會定義 OpenXPS 的其他 API 和物件。 而IXpsOMObjectFactory1 介面則提供影像轉換的其他方法。 以下是語法:

IXpsOMObjectFactory1->ConvertHDPhotoToJpegXR(IXpsOMImageResource *imageResource);

IXpsOMObjectFactory1->ConvertJpegXRToHDPhoto(IXpsOMImageResource *imageResource);

Windows 8 提供下列新的和更新的列舉。

新的列舉:

XPS_DOCUMENT_TYPE

更新的列舉

XPS_IMAGE_TYPE

新的 GetDocumentType 方法可讓應用程式判斷檔的 XPS 格式。 這些可在 IXpsOMObjectFactory1IXpsOMPackage1IXpsOMPage1中獲得。 以下是方法的清單。

IXpsOMObjectFactory1::GetDocumentTypeFromFile
IXpsOMObjectFactory1::GetDocumentTypeFromStream
IXpsOMPackage1::GetDocumentType
IXpsOMPage1::GetDocumentType

Windows 8 提供下列支援 OpenXPS 的新錯誤碼:

XPS\_E\_MISMATCHED\_NAMESPACE。
如果命名空間不相符,則會傳回此錯誤。
XPS\_E\_ABSOLUTE\_REFERENCE。
如果 MSXPS 在內部參考中使用絕對 URI,或嘗試使用內部參考在數據流中串行化,就會傳回此錯誤。 這是因為 XPS OM 會產生相對 URI。 雖然 MSXPS 同時支援相對和絕對 URI,但 OpenXPS 需要相對 URI。

openXPS 驅動程序支援

IPrintDocumentPackageTarget

IXpsOMObjectFactory1::GetDocumentTypeFromFile

IXpsOMObjectFactory1::GetDocumentTypeFromStream

IXpsOMPackage1::GetDocumentType

IXpsOMPage1::GetDocumentType

XPS_DOCUMENT_TYPE

XPS_IMAGE_TYPE