【问题标题】:WPF to XPS to PDFWPF 转 XPS 转 PDF
【发布时间】:2012-11-30 15:45:45
【问题描述】:

我已经在标准 WPF 控件中实现了一个报告,并且还实现了一个DocumentPaginator 来获取这些控件并将它们转换为用于打印的文档。

我还实现了一些代码,它使用文档分页器将页面呈现为图像并使用PDFSharp 将它们写入 PDF,但是这不允许复制和粘贴,图像质量也值得怀疑。

我已经尝试了GhostXPS 实用程序,并正在考虑通过保存到 XPS 文档然后使用GhostXPS 将其转换为 PDF 来使用它,这很有希望,但是当前版本包含一个错误渲染从生成的 PDF 复制的数据无用...

所以我想我会在这里要求尝试找到一种有效的方法来执行此操作,有人可以提出一个很好的方法来获取DocumentPaginator 并将其直接保存到 PDF 中,具有复制/粘贴功能或使用此功能将其从 XPS 文档转换为 PDF?

谢谢, 亚历克斯。

编辑 - 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 修复的更多详细信息:Output to PDF in WPF

【问题讨论】:

  • 我也在使用自定义DocumentPaginator 进行打印。 PDF 和 XPS 是通过打印到虚拟打印机生成的。它也适用于大型文档。
  • 我试图避免使用虚拟打印机,因为我想尽量减少用户依赖。
  • @AlexHopeO'Connor 我和你有同样的问题,如果你分享你对 PDFSharp 1.31 所做的修复,我将不胜感激。
  • @NJones 为我的问题添加了更多详细信息
  • @AlexHopeO'Connor 谢谢!我得到了工作,但不得不进行一些其他错误修正。我在这里写了博客:nathanpjones.com/wp/2013/03/output-to-pdf-in-wpf-for-free

标签: wpf pdf .net-4.0 xps pdfsharp


【解决方案1】:

PDFsharp 1.31 包含一个 XPS 转换器。这是一个测试版,但 AFAIK 它支持几乎所有内容,并且可以满足您的需求。

PDFsharp 1.31 可以从 SourceForge 或 CodePlex 下载。

【讨论】:

  • 这很好用,但是我想知道您是否可以详细说明为什么 XPS 转换器在 1.32 版中不存在?已经停产了吗?
  • 我问过 Stefan(PDFsharp 的开发者)。 XPS 转换器并未停产,但有些休眠。他想重新安排(重写)一些部分,但不知道他什么时候才能找到时间(我认为一些缺失的细节会导致更大的变化)。 AFAIK XPS 转换器也应该与 PDFsharp 1.32 一起使用(但您必须下载 1.31 才能获得转换器源)。很高兴听到它对你有用。自己从未尝试过,但我看到的演示令人印象深刻。
  • 我很期待他什么时候能把它重新捡起来。与此同时,我深入研究并发现了一些额外的错误,可以解决一些问题。我在这里写了博客:nathanpjones.com/wp/2013/03/output-to-pdf-in-wpf-for-free
  • 貌似官方源码有50页的限制,需要自己修改编译(如果还没有这样的fork的话)
  • @user-007 我已经使用 PDF sharp 将 xps 转换为 pdf,但在 xps 中显示图像时,id 在 PDF 上没有显示。
【解决方案2】:

如果可以选择商业 SDK,我遇到的一家公司拥有专业的 XPS 到 PDF 转换选项(以及更多)。

http://www.nixps.com

警告:我不隶属于这家公司,也没有尝试过他们的产品。另一方面,我听说过他们的好消息。

【讨论】:

  • 我宁愿使用开源工具
  • 他们还在营业吗?我试图向销售部门发送一封电子邮件,但它被退回了。
  • 最后听说它们不再直接存在,但已被 Hybrid Software 收购:hybridsoftware.com
【解决方案3】:

我使用Telerik Reporting 处理文档分页并允许您在设计器中创建报表,类似于创建 GUI。我决定只购买第 3 方产品,因为我不想花费开发时间编写自己的分页器等。此外,这个工具可能比自定义解决方案更能证明错误,并为你想要的方式提供很大的灵活性设计您的打印输出/报告。将来,如果您需要更复杂的打印或报告,此工具的功能会更多。我不为 Telerik 工作,但那里的产品很好。

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

【讨论】:

    【解决方案4】:

    恕我直言,您的想法是正确的:在我看来,XPS 是将数据序列化为可用格式的最简单方法,尤其是在转换方面。

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

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

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

    另外,如果转换 MSXPS 让您头疼,您可能想查看XpsConverter,它将 MSXPS 转换为 OpenXPS,并且作为 Window 的驱动程序,它可以在任何使用 .NET 3 及更高版本的机器上使用。

    让我们随时了解您尝试的任何解决方案,虚拟报告越来越受欢迎。

    【讨论】:

    • PDFSharp 稍作修改后效果很好,但我确实必须返回一个版本并使用我通过谷歌找到的自定义修复程序编译源代码。
    猜你喜欢
    • 2019-12-01
    • 2016-04-03
    • 2011-09-17
    • 2011-01-18
    • 2013-04-24
    • 2011-06-25
    • 2011-06-30
    • 2011-11-25
    • 2016-09-08
    相关资源
    最近更新 更多