2

问:有没有办法在 WinRT 应用程序中打印 XPS 文档?

背景:我想从基于 XAML 的 Windows 应用商店应用程序中打印 XPS 文档,但这似乎是不可能的。标准桌面方法StartXpsPrintJob不适用于 Windows 应用商店应用程序。WinRT 特定的Windows.UI.Xaml.Printing / Windows.Graphics.Printing方法需要一个实际的 UIElement,但 WinRT XAML 不支持所有 XPS 功能,例如非矩形剪切路径、不透明蒙版等(它也不支持似乎支持打印 Glyph 元素,但那是另一回事了。)那么,我是否遗漏了什么,或者没有办法直接从 WinRT 打印 XPS 文档?由于 Windows 使用 XPS 作为其打印路径,因此无法直接提供 XPS 数据进行打印似乎很奇怪。

更新:我花了更多时间尝试直接打印 XPS 文档。Direct2D 提供打印接口,但其 API 仅接受 Direct2D 命令。我想直接发送 XPS 数据,但此页面显示“Windows 打印子系统和打印机组件......对 Direct2D 应用程序完全隐藏。” 目前,我可以看到打印 XPS 文档的唯一方法是将它们转换为一系列 Direct2D 命令,然后通过PrintControl立即将其转换回 XPS 。这似乎没有必要且效率低下。

4

1 回答 1

1

“或者没有办法直接从 WinRT 打印 XPS 文档?” - 这听起来是正确的。他们似乎放弃了 XPS/FlowDocument。

一种可能的解决方法是自己制作 XPS->UIELEMENT 转换器,然后它将进行必要的转换。但是,正如您已经提到的,WinRT XAML 是有限的。它删除了很多必要的东西。因此,您很可能会做出“半解决方案”。

这是一篇很好的文章,它解释了 WinRT XAML 中可能的“限制”:

http://blog.tallcomponents.com/2012/04/rasterizing-winrt.html

我认为可能的解决方案是:

1)您编写自己的 XPS 光栅化器,它采用 .XPS 文件并将其转换为可以打印的 PNG。这是一项漫长的工作,如果不是更多,可能需要大约 5-7 个月。

2) 只需使用 XPS->HTML 转换器。也许已经有第三方库可以做到这一点?在 WInRT 中打印 html 是可能的:P

3) 看看你能不能接触到 TallComponents。这样您就可以将 XPS 转换为 PDF 到 IMAGE。

于 2013-04-04T06:49:15.413 回答