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 照片转换为 JPEGXR 需要重新编码整个图像才能生成所需的控制位。 因此,为高分辨率图像提供 JPEGXR 图像将确保与 OpenXPS 兼容,并最大程度地降低 MSXPS 映像的转换成本。
Xpsobjectmodel_1.h 标头定义 OpenXPS 的其他 API 和对象。 IXpsOMObjectFactory1 接口为图像转换提供了其他方法。 语法如下:
IXpsOMObjectFactory1->ConvertHDPhotoToJpegXR(IXpsOMImageResource *imageResource);
IXpsOMObjectFactory1->ConvertJpegXRToHDPhoto(IXpsOMImageResource *imageResource);
Windows 8提供以下新的和更新的枚举。
新枚举:
更新了枚举
新的 GetDocumentType 方法允许应用程序确定文档的 XPS 格式。 IXpsOMObjectFactory1、IXpsOMPackage1 和 IXpsOMPage1 中提供了这些选项。 下面是方法的列表。
IXpsOMObjectFactory1::GetDocumentTypeFromFile
IXpsOMObjectFactory1::GetDocumentTypeFromStream
IXpsOMPackage1::GetDocumentType
IXpsOMPage1::GetDocumentType
Windows 8提供了以下支持 OpenXPS 的新错误代码:
- XPS\_E\_MISMATCHED\_NAMESPACE。
- 如果命名空间不匹配,则返回此错误。
- 如果 MSXPS 在内部引用中使用绝对 URI,或尝试使用内部引用在流中序列化,则返回此错误。 这是因为 XPS OM 生成相对 URI。 尽管 MSXPS 支持相对 URI 和绝对 URI,但 OpenXPS 需要相对 URI。
相关主题