将PDF嵌入到WPF应用程序中

时间:2014-01-20 17:23:51

标签: c# wpf vb.net mvvm axacropdf

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

  1. 在托管WindowsFormsHost的{​​{1}}中显示PDF 控制,类似于显示here的内容。问题是我的应用程序设置AxAcroPdf来创建类似于Modern UI的样式,但是 与AllowsTransparency = True(对照组合)不能很好地融合 变得不可见了。

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

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

  4. 使用带AllowsTransparency = False的第二个窗口显示AllowsTransparency = False,然后将其破解,使其看起来像主窗口的子控件,如here所述。但是,我不喜欢代码隐藏方法,因为我使用的是MVVM。

  5. 查找WPF的原生PDF控件。但是,我只找到了几个商业产品,现在不是一个选择。

  6. 我需要的是能够:

    • 在WPF应用程序中显示PDF或其表示形式(即图像或转换为其他格式)。
    • 保持我的风格在视觉上完整且流畅(WindowsFormsHost必须保持AllowsTransparency)。
    • 使用遵循MVVM原则的方法(最好不要使用代码隐藏)。
    • 免费将其包含在我的应用程序中(用于商业用途)。

    我完全接受手工制作的解决方案,开源库甚至完全不同的方法。

3 个答案:

答案 0 :(得分:4)

我有两个解决方案:

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

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

  3. 希望这些提示有助于解决问题。

答案 1 :(得分:3)

如果您对开源解决方案开放,我建议GhostScript。您可以将PDF(具有良好质量,大部分)转换为您可能想要使用的大多数格式的单个图像文件。

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

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

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

答案 2 :(得分:1)

我之前使用的一个很好的解决方案是使用CefSharp。这是支持预览PDF文档的Chrome浏览器引擎。 访问quick start page

如果您遇到问题,建议您访问Troubleshooting page以设置适当的设置。

如果要在本地驱动器上显示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;