如何以编程方式启用/禁用“在浏览器中显示PDF”以用于Acrobat / Reader XI或DC以用于Adobe ActiveX控件

时间:2015-07-06 20:58:06

标签: .net pdf com adobe activex

我们有一个使用Adobe ActiveX控件的.NET C#应用程序。对于Adobe Acrobat和Adobe Reader的版本7-10,要使用此控件,您需要打开“在浏览器中显示PDF”设置。您可以使用

从GUI手动执行此操作
Preferences > Internet > Display PDFs in browser

或通过直接设置注册表设置以编程方式

HKEY_CURRENT_USER\Software\Adobe\(Product Name)\(Version)\Originals
"bBrowserIntegration"=dword:00000001

在SDK参考http://www.adobe.com/devnet-docs/acrobatetk/tools/PrefRef/Windows/Originals.html#BrowserIntegration之后。当我们的客户拥有Adobe Reader或Adobe Acrobat的7-10版本时,我们的应用程序一直在以编程方式设置此注册表值。上面的链接还表明在XI(11)中不推荐使用此bBrowserIntegration注册表项。旧的注册表路径仍然存在于新版本中,即:

HKEY_CURRENT_USER\Software\Adobe\(Product Name)\(Version)\Originals

然而,正如文档所示,不再有bBrowserIntegration密钥,它已被弃用。

只要启用了“在浏览器中显示PDF”,Adobe ActiveX Control似乎仍能正常运行XI和DC。

对于版本XI(11)和DC,有两个已发布的链接,清楚地显示如何实现手动

XI (11): https://helpx.adobe.com/acrobat/11/using/display-pdf-browser-acrobat-xi.html
DC (current): https://helpx.adobe.com/acrobat/using/display-pdf-in-browser.html

在测试Adobe Reader DC时,如果我们没有完成在浏览器中为新客户安装启用显示PDF的步骤,那么我们的应用程序将抛出COM error然后如果我们启用后面的设置上面链接中的说明,一切都按照我们的应用程序的预期工作,它使用Adobe ActiveX控件呈现PDF,这与我们期望在未设置注册表设置时在旧版本(7-10)中看到的相似(请参阅我的那时旧的帖子和我自己的解决方案How to diagnose cause, fix, or work around Adobe ActiveX / COM related error 0x80004005 progmatically?)。

所以,问题仍然存在,通过相应地设置注册表设置bBrowserIntegration,对于今天的XI或DC中的手动过程或等同于7-10中的手动过程,预期的程序等效性是多少。我们希望能够打开它,然后在我们的应用程序结束时将其重置为之前的设置(因此我们的应用程序不会因为我们的应用程序需要而强制用户保留设置)这就是我们今天所做的7 -10

我似乎无法在线找到任何从开发人员角度启用/禁用浏览器集成的参考资料,因此我们的应用程序可以继续使用ActiveX控件而不会出现COM错误,从而迫使用户更改这是手动。

首要任务是了解 DC 的解决方案,因为这代表了Adobe Acrobat / Reader的新范例。

1 个答案:

答案 0 :(得分:2)

您是否考虑过使用“Registration free”方案?它允许在应用程序中使用COM / ActiveX组件,而无需全局注册Ac​​tiveX,并允许仅基于随应用程序一起提供的XML清单中定义的接口为应用程序加载隔离的COM / ActiveX控件。

有关工具列表,请参阅this post,有关使用Flash插件和this post的示例XML清单,请参阅step by step guide。我假设对于Adobe Reader控件,您应该使用 C:\ Program Files \ Adob​​e \ Acrobat \ Reader \ ActiveX 文件夹中的 PDF.ocx

更新(2015年7月27日):在Adobe Reader的最新版本中,他们使用AcroPDF.dll并将其移至\ Program Files \ Common Files \ Adob​​e \ Acrobat \ ActiveX \,因为我已经使用Adobe Reader 11进行了检查。不幸的是尝试使用regsvr32.exe安装AcroPDF.dll时抛出错误。我想它会在初始化之前检查一些额外的密钥以防止不允许使用(直到用户在IE中解锁控件)。似乎没有办法正式和程序化地绕过用户明确允许PDF控件供非Adobe应用程序使用的要求。

另请参阅discussion有关x64平台上可能出现的问题:更好,更可靠的方法是通过托管IE的WebBrowser控件间接使用Adobe Reader控件,该控件将相应地调用嵌入式PDF查看器控件。