WPF到XPS到PDF

16
我已经使用标准WPF控件实现了一个报告,并且还实现了一个DocumentPaginator来将这些控件转换为打印文档。我还实现了一些代码,使用文档分页器将页面呈现为图像,并使用PDFSharp将其写入PDF,但这不允许复制和粘贴,而且图像质量也值得怀疑。
我尝试过GhostXPS实用程序,并考虑使用它通过保存到XPS文档,然后使用GhostXPS将其转换为PDF,这是有希望的,但当前版本存在一个bug,导致从生成的PDF中复制的数据无用...
所以我想在这里询问,试图找到一种有效的方法来做到这一点,请问有人能够建议一种好的方法来获取DocumentPaginator并直接将其保存为具有复制/粘贴功能的PDF,或者将其从XPS文档转换为具有此功能的PDF吗?
谢谢, Alex。

编辑 - PDFSharp修复:

好的,根据要求,这是我为PDFSharp 1.31 XPS转换器编译修复的步骤:

1)我从这里下载了源代码:

PDFSharp - SourceForge

2)我按照这篇文章中的说明进行操作:

PSFSharp Fix

XpsParser.ImageBrush.cs (ln 22, added): brush.Opacity = 1;
PdfContentWriter.cs (ln 526, changed): if (opacity <= 1)

3)然后只需编译源代码,首先打开“PdfSharp-WPF.csproj”并构建它,然后打开“PdfSharp.Xps.csproj”并同样构建它,相关的库文件是“PdfSharp-WPF.dll”和“PdfSharp.Xps.dll”。

请注意,在尝试构建源代码时,您可能会收到一些错误,这取决于您针对哪个版本的.NET,如果您只是阅读错误消息,这些错误很容易修复。

编辑(2):NJones创建了一篇博客文章,详细介绍了PdfSharp修复方法:在WPF中输出为PDF


我也在使用自定义的“DocumentPaginator”进行打印。通过打印到虚拟打印机来生成PDF和XPS文件。它对于大型文档也能很好地工作。 - Lubo
1
我正在尝试避免使用虚拟打印机,因为我想最小化用户依赖。 - Alex Hope O'Connor
1
@NJones 给我的问题添加了更多细节。 - Alex Hope O'Connor
2
@AlexHopeO'Connor 谢谢!我已经让事情正常运转了,但是还需要进行其他一些错误修复。我在这里写了一篇博客:http://www.nathanpjones.com/wp/2013/03/output-to-pdf-in-wpf-for-free/ - N Jones
抱歉——MIME类型设置错误。现在应该可以正常工作了。 - N Jones
显示剩余3条评论
4个回答

14

PDFsharp 1.31包含一个名为XPS Converter的转换器。虽然这是一个beta版本,但据我所知,它几乎支持所有功能,可能适合您的需要。

可以从SourceForge或CodePlex下载PDFsharp 1.31。


这个很完美,但我想知道为什么版本1.32中没有XPS转换器?它已经停产了吗? - Alex Hope O'Connor
我问了PDFsharp的开发者Stefan。XPS转换器并没有停止,但有点休眠。他想重新排列(重写)一些部分,但不知道什么时候会有时间(我认为一些缺失的细节将导致更大的变化)。据我所知,XPS转换器也应该与PDFsharp 1.32一起使用(但您必须下载1.31才能获得转换器源代码)。很高兴听到它对您有用。我自己从未尝试过,但我看到的演示非常令人印象深刻。 - I liked the old Stack Overflow
8
就我个人而言,我期待他重新开始工作的时候。与此同时,我深入研究了它,并发现了一些额外的bug,这将解决一些问题。我在这里写了博客:http://www.nathanpjones.com/wp/2013/03/output-to-pdf-in-wpf-for-free/。 - N Jones
1
显然官方源代码存在50页的限制,如果没有相应的分支代码,你需要自行修改并编译。 - Kind Contributor
@user-007,我使用PDF sharp将XPS转换为PDF,但PDF上没有显示,而在XPS中显示了图像。 - Meer
与此同时,有人将其打包为一个名为XpsToPdf的NuGet包(GitHub存储库)。 - Tom

3
如果商业软件开发工具包是一个选择,我发现有一家公司提供专业的XPS转PDF转换等功能。
请参考http://www.nixps.com
注意:我与该公司没有关联,也没有使用过他们的产品。但我听说过这些产品不错。

我宁愿使用开源工具。 - Alex Hope O'Connor
他们还在经营吗?我试图给销售发送电子邮件,但是它被退回了。 - Louis Somers
据我最后了解,它们不再直接存在,而是已被 Hybrid Software 收购:https://www.hybridsoftware.com。 - David van Driessche

1

我使用 Telerik Reporting ,他处理文档分页和允许你在类似创建 GUI 的设计器中创建报告。我决定购买第三方产品,因为我不想花费开发时间编写自己的分页器等。此外,这个工具可能比自定义解决方案更加防错,并且允许大量灵活性来设计打印输出/报告。将来如果您需要更复杂的打印或报告要求,这个工具可以做得更多。我不是 Telerik 的员工,但他们的产品很好。

它允许导出到 PDF、Word、Excel、HTML、PowerPoint、PNG 等等。


1

在我看来,你的想法是正确的:XPS 是我认为最简单的将数据序列化为可用格式的方法,特别是用于转换。

至于第三方工具,我有一个同事(不是我自己)使用 CheckPrixa 取得了一定的成功;它是免费软件,并提供命令行转换功能(即通过生成的 .bat 文件序列化文档并进行转换)。

它还允许您处理关键字、标题等,以及更重要的项目,如分页。

据我所知,没有已知的差异。

另外,如果转换 MSXPS 给您带来了麻烦,您可能需要查看 XpsConverter,它可以将 MSXPS 转换为 OpenXPS,并作为 Windows 驱动程序,在使用 .NET 3 及以上版本的任何计算机上都可用。

请随时向我们更新您尝试的任何解决方案,虚拟报告是一个不断发展的领域。


PDFSharp 经过一些轻微的修改完美地运作了,但是我不得不回到一个版本,并使用通过谷歌找到的自定义修复程序编译源代码。 - Alex Hope O'Connor
Microsoft提供了XpsConverter,但由于其网站上提到的版权问题,似乎无法使用。 “XpsConverter不打算用于除作为独立工具以外的任何其他用途。它不支持任何其他用途。它不能在任何应用程序或驱动程序中部分或全部使用,并且禁止反编译或修改该工具。 Microsoft保留所有权利并拥有XpsConverter.exe及其所有支持文档的版权。” - Ashish Gehlot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接