【发布时间】:2012-02-18 06:03:02
【问题描述】:
使用我在 SO 上找到的代码使用基于 COM 的 Acrobat Reader 通过托管在 WindowsFormsHost 中来显示 PDF。
它可以很好地显示 PDF。两个问题:
-
当我加载 PDF 时,控件 AxAcroPDFLib.AxAcroPDF 获得焦点
我希望专注于之前的
-
当 AxAcroPDFLib.AxAcroPDF 获得焦点时,它会吃掉热键 (N)
ALT 键甚至没有在 N 下划线。即使用户选择 AxAcroPDFLib.AxAcroPDF,我也希望热键能够工作。
我知道这是 WPF 中的 COM 和 Adobe,可能没有答案。如果有免费或便宜的 WPF 控件来查看 PDF,我会很乐意走这条路。这是用于商业应用程序,因此必须免费(或便宜)用于商业用途。
<Button Click="Button_Click">_Next</Button>
<WindowsFormsHost Name="windowsFormsHost1" Margin="1" />
UserControl1 UC = new UserControl1(@"C:\temp\1000001.pdf");
this.windowsFormsHost1.Child = UC;
public UserControl1(string filename)
{
InitializeComponent();
this.axAcroPDF1.LoadFile(filename);
}
这确实显示 PDF。在生产应用程序中,我根据使用的操作显示各种 PDF。
【问题讨论】:
-
Acrobat Reader 使用了令人讨厌的 hack,控件实际上是另一个进程 (AcroRd32.exe) 拥有的窗口。这有各种副作用,吃击键只是其中之一。不确定这是否重要,用户对 Adobe 软件的烦恼有点熟悉。
-
哦,是的,我很痛苦地意识到,即使在 COM 中,Adobe 也不能很好地发挥作用,而这是 WPF 中的 COM。即使是 windowsFormsHost1 上的按键按下事件也不会触发。 XPS确实玩得很好。我会即时转换为 XPS,但这是用于诉讼支持申请,并且由于监管链的原因,我必须显示 pdf。我可以启动一个本机进程,因此问题是外部的,但这仍然存在问题并且 UI 脱节。
-
您是否愿意考虑其他第三方 PDF 查看器组件?
-
如果是这样,我们在让 O2S 的 PDFView4Net 快速运行方面取得了相当大的成功 (o2sol.com/pdfview4net/overview.htm)。注意:是许可的,我只使用过 WinForms 组件,但他们看起来也有 WPF 特定的组件。
-
看起来 O2S 将 PDF 渲染为图像。不确定这是否会满足我们的监管链限制,但我会检查。定价似乎合理。
标签: .net wpf pdf windowsformshost