3

我正在尝试在 WPF 应用程序中嵌入/显示 PDF。到目前为止,我已经尝试了这些解决方案,但没有成功:

  1. WindowsFormsHost在托管控件中显示 PDF AxAcroPdf ,类似于此处显示的内容。问题是我的应用程序设置AllowsTransparency = True为创建类似于Modern UI的样式,但这与 a 不能很好地融合WindowsFormsHost(控件变得不可见)。

  2. WebBrowser在控件中显示 PDF 。问题是一样的。

  3. Set AllowsTransparency = False,但这会导致应用程序感觉迟缓。由于我故意使用 WPF 来增强我们的业务应用程序的外观和感觉以使我们的最终用户受益,因此这不是一个解决方案。

  4. 使用第二个窗口AllowsTransparency = False来显示WindowsFormsHost,并修改它以使其看起来像主窗口的子控件,如此处所述。但是,我不喜欢代码隐藏方法,因为我使用的是 MVVM。

  5. 查找 WPF 的本机 PDF 控件。然而,我只找到了几个商业的,现在这不是一个选择。

我需要的是能够:

  • 在 WPF 应用程序中显示 PDF 或其表示(即图像或转换为另一种格式)。
  • 保持我的风格在视觉上保持完整和流畅(AllowsTransparency必须保持True)。
  • 使用尊重 MVVM 原则的方法(最好没有代码隐藏)。
  • 免费将其包含在我的应用程序中(用于商业用途)。

我对手工制作的解决方案、开源库甚至完全不同的方法完全持开放态度。

4

3 回答 3

4

我有两个解决方案:

  1. 打开您的 .pdf 文件,然后打印为 .xps(您也必须能够在代码中执行此操作),然后您可以将此文件嵌入到您的应用程序中,并将其显示为 xps 文档。请参阅:WPF 中的文档 - MSDN - Microsoft (XPS)

  2. 要使用免费库,我不太确定这是否允许显示 pdf,但它会生成它们,您可以查看EO-Pdf

希望这个提示有助于解决问题。

于 2014-01-21T15:04:59.987 回答
3

如果您愿意接受开源解决方案,我会推荐GhostScript。您可以将 PDF(在大多数情况下质量不错)转换为您可能想要使用的几乎任何格式的单个图像文件。

另一种选择是使用pdf2htmlEX将 PDF 转换为 HTML ,但它目前只能为 Linux 编译。

我在 Linux 和 Windows 上的多个应用程序中都使用了上述两种解决方案。HTML方式的优点是可以复制和粘贴文本。GhostScript 方式的优点是图像可能更便携(更小)。

与任何开源解决方案一样,您需要了解发布每个产品的许可条款,以及这可能如何影响您的最终结果。

于 2014-01-20T17:59:20.233 回答
2

我之前使用的一个很好的解决方案是使用 CefSharp。它是支持预览 PDF 文档的 Chrome 浏览器引擎。访问快速入门页面

如果您遇到问题,建议访问故障排除页面以设置适当的设置。

如果您想在本地驱动器上显示 PDF 文件,您还应该为浏览器使用这些设置,然后使用file:///协议:

 CefSharp.BrowserSettings browserSettings = new CefSharp.BrowserSettings();
 browserSettings.FileAccessFromFileUrls = CefSharp.CefState.Enabled;
 browserSettings.UniversalAccessFromFileUrls = CefSharp.CefState.Enabled;
 browserSettings.TextAreaResize = CefSharp.CefState.Enabled;
 my_bowser.BrowserSettings = browserSettings;
于 2016-06-28T19:10:34.060 回答