在WinForms中托管IE 8并打开PDF

Jas*_*ams 6 c# vb.net acrobat file internet-explorer-8

我们有一个托管WebBrowser控件的表单.这是表单上唯一的控件.

我们将表单传递给临时PDF文件的文件路径,它确实:

WebBrowser1.Navigate(Me._PathToPdf)
Run Code Online (Sandbox Code Playgroud)

当表单关闭时,它将导航离开PDF文件:

WebBrowser1.Hide()
WebBrowser1.Navigate("about:blank")

Do Until WebBrowser1.ReadyState = WebBrowserReadyState.Complete
    Application.DoEvents()
    System.Threading.Thread.Sleep(50)
Loop
Run Code Online (Sandbox Code Playgroud)

表单关闭后,调用类将删除临时PDF文件.

这个过程很有效......直到我们安装了Internet Explorer 8.出于某种原因,IE8和Adobe Acrobat 8​​(或9)的组合会在临时PDF文件上放置一个额外的文件锁定句柄.在整个应用程序关闭之前,额外的锁定句柄不会消失.我还要提一下,在Acrobat打开文件之前,文件上没有锁.

我们可以在多台机器上重现这一点,它始终是IE8和Adobe Acrobat Reader的结合.我们可以安装福昕阅读器3而不是Adobe Acrobat,一切正常.同样,我们可以在使用IE7和Adobe Acrobat的机器上运行应用程序,并且工作正常.但是,当你混合使用IE 8的魔法药水和Acrobat时,你最终会弄得一团糟.

任何人都可以告诉我为什么我得到一个额外的文件锁,一直持续到应用程序结束?

谢谢.

可以在此处找到演示我的问题的示例应用程序:PDFLockProblemDemo.zip

Luc*_*cas 1

在我看来,真正的问题是使用控件WebBrowser来托管 Adob​​e Reader Web 浏览器插件来显示 PDF。是否有更好的方法直接显示 PDF,而不引入对 Web 浏览器的依赖?Adobe 没有提供可直接托管在表单内的 SDK 或 ActiveX 控件吗?


更新:我环顾四周,发现这篇文章,他们访问 Adob​​e ActiveX 控件 ( AxAcroPDFLib.AxAcroPDF) 并简单地调用:

axAcroPDF1.LoadFile("mypdf.pdf");
axAcroPDF1.Show();
Run Code Online (Sandbox Code Playgroud)