无需打印队列,Direct2D能否直接生成XPS文件?
Direct2D打印与XPS文档直接创建的解决方案
无法绕过打印队列直接创建
ID2D1PrintControl:ID2D1Device::CreatePrintControl的设计逻辑依赖打印队列或IPrintDocumentPackageTarget接口,微软未公开类似ID2D1DeviceMagic::CreatePrintControlOnStream这类直接绑定流或XPS OM的私有/扩展接口,所有公开的Direct2D打印API都要求传入打印队列相关参数或合法的IPrintDocumentPackageTarget实例。无打印队列生成XPS的替代方案:
- 利用
IPrintDocumentPackageTargetFactory::CreateDocumentPackageTargetForXps创建基于文件或IStream的IPrintDocumentPackageTarget,无需实际打印队列; - 将该目标传入
ID2D1Device::CreatePrintControl,Direct2D会自动将内容渲染为XPS格式并写入指定的文件/流; - 若需直接操作XPS OM对象(如绑定到
IXpsOMPage),可先通过上述方式生成XPS流,再用XPS OM API加载后修改;或直接通过XPS OM API构建文档结构,再获取对应页面的ID2D1DeviceContext进行渲染。
- 利用
针对
ID2D1DeviceContext的直接创建:可以直接获取用于XPS页面渲染的设备上下文,但需通过XPS OM的IDXpsOMDeviceContext接口间接获取,流程上是先初始化XPS文档对象,再关联D2D设备,而非通过Direct2D打印控制接口创建。
内容的提问来源于stack exchange,提问作者Mitch
相关产品推荐
相关产品推荐

