将PDF嵌入到WPF应用程序中

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

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

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

  3. 设置AllowsTransparency = False ,但这会导致应用程序感觉迟钝。 由于我使用WPF旨在增强我们的业务应用程序的外观和感觉,使我们的最终用户受益,这不是一个解决方案。

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

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

我需要的是能够:

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

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

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

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

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

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

我有两个解决方案:

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

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

希望这些技巧有助于解决问题。

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

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

如果要在本地驱动器上显示PDF文件,还应将这些设置用于浏览器,然后使用file:/// protocol:

  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;