将PDF嵌入到WPF应用程序中
我正在尝试在WPF应用程序中嵌入/显示PDF。 到目前为止,我已经尝试过这些解决方案,但没有成功:
-
在托管
AxAcroPdf
控件的WindowsFormsHost
显示PDF,与此处显示的类似。 问题是我的应用程序设置AllowsTransparency = True
来创建类似于Modern UI的样式,但是它与WindowsFormsHost
不能很好地融合(控件变得不可见)。 -
在
WebBrowser
控件中显示PDF。 问题是一样的。 -
设置
AllowsTransparency = False
,但这会导致应用程序感觉迟钝。 由于我使用WPF旨在增强我们的业务应用程序的外观和感觉,使我们的最终用户受益,这不是一个解决方案。 -
使用带有
AllowsTransparency = False
的第二个窗口来显示WindowsFormsHost
,并将其破解以使其看起来像主窗口的子控件,如此处所述。 但是,我不喜欢代码隐藏方法,因为我使用的是MVVM。 -
查找WPF的本机PDF控件。 但是,我只找到了几个商业产品,现在不是一个选择。
我需要的是能够:
- 在WPF应用程序中显示PDF或其表示(即图像或转换为其他格式)。
- 保持我的风格视觉上完整和流畅(
AllowsTransparency
必须保持True
)。 - 使用一种尊重MVVM原则的方法(最好不要使用代码隐藏)。
- 将其包含在我的应用程序中免费(用于商业用途)。
我对手工制作的解决方案,开源库甚至是完全不同的方法完全开放。
如果您对Open-Source解决方案开放,我会推荐GhostScript 。 您可以将PDF(具有良好质量,大部分)转换为您可能想要使用的大多数格式的单个图像文件。
另一种选择是使用pdf2htmlEX将PDF转换为HTML,但它目前只能为Linux编译。
我在Linux和Windows上的几个应用程序中使用上述两种解决方案。 HTML方式的优点是可以复制和粘贴文本。 GhostScript方式的优点是图像可能更便携(更小)。
与任何开源解决方案一样,您需要了解每个产品发布的许可条款,以及这可能会影响您的最终结果。
我有两个解决方案:
-
打开你的.pdf文件,然后打印为.xps(你也必须能够在代码中执行此操作),然后将此文件嵌入到您的应用程序中,并将其显示为xps文档。 请参阅: WPF中的文档 – MSDN – Microsoft(XPS)
-
要使用免费的库,我不太确定这是否允许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;