我正在尝试在WPF应用程序中嵌入/显示PDF。到目前为止,我已经尝试过这些解决方案,但没有成功:
在托管WindowsFormsHost
的{{1}}中显示PDF
控制,类似于显示here的内容。问题是我的应用程序设置AxAcroPdf
来创建类似于Modern UI的样式,但是
与AllowsTransparency
= True
(对照组合)不能很好地融合
变得不可见了。
在WindowsFormsHost
控件中显示PDF。问题是一样的。
设置WebBrowser
,但这会导致应用程序感觉迟钝。由于我有意使用WPF来增强我们的业务应用程序的外观和感觉,以使我们的最终用户受益,因此这不是一个解决方案。
使用带AllowsTransparency = False
的第二个窗口显示AllowsTransparency = False
,然后将其破解,使其看起来像主窗口的子控件,如here所述。但是,我不喜欢代码隐藏方法,因为我使用的是MVVM。
查找WPF的原生PDF控件。但是,我只找到了几个商业产品,现在不是一个选择。
我需要的是能够:
WindowsFormsHost
必须保持AllowsTransparency
)。我完全接受手工制作的解决方案,开源库甚至完全不同的方法。
答案 0 :(得分:4)
我有两个解决方案:
打开.pdf文件,然后以.xps打印(也必须能在代码中执行此操作),然后将此文件嵌入到您的应用程序中,并将其显示为xps文档。请参阅:Documents in WPF - MSDN - Microsoft (XPS)
要使用免费库,我不太确定这是否允许show pdf,但它会生成它们,您可以查看EO-Pdf。
希望这些提示有助于解决问题。
答案 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;