我们有一个.NET C#应用程序,它使用ActiveX控件。对于Acrobat和Adobe的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或Acrobat的7-10版本时,我们的应用程序一直在以编程方式设置此注册表值。上面的链接还表明这个bBrowserIntegration
注册表项在XI (11)中不受欢迎。旧的注册表路径仍然存在于新版本中,即:
HKEY_CURRENT_USER\Software\Adobe\(Product Name)\(Version)\Originals
但是,不再像文档所指出的那样存在bBrowserIntegration
密钥,因此不推荐使用它。
看起来在XI和DC上仍然可以正常工作,只要在浏览器中显示ActiveX就可以了,就像以前一样。
对于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时,如果我们不完成在浏览器中为新客户安装启用显示PDF的步骤,那么我们的应用程序将抛出一个COM error
,然后,如果我们按照上面链接中的说明启用设置,那么所有操作都会按照我们的应用程序的预期进行,它使用Adobe控件来呈现PDF,这与我们在未设置注册表设置时(请参阅我的旧帖子和我自己的解决方案后的如何诊断导致、修复或处理Adobe80004005相关的ActiveX / COM错误?)在旧版本(7-10)中所期望看到的类似。
因此,问题仍然存在,对于今天的XI或DC中的手动过程来说,什么是预期的编程等价物,还是相当于通过相应地设置注册表设置bBrowserIntegration
而在7-10中工作的程序。我们希望能够打开它,然后在应用程序结束时将其重置为以前的设置(所以我们的应用程序不会仅仅因为我们的应用程序需要它而强迫用户保留设置),这就是我们今天在7-10中所做的。
我似乎无法从开发人员的角度在网上找到任何关于如何启用/禁用浏览器集成的引用,因此我们的应用程序可以继续使用ActiveX控件,而不会出现COM错误,迫使用户手动更改它。
首要任务是理解DC的解决方案,因为这代表了Acrobat/Reader的新范例。
发布于 2015-07-20 11:13:52
您考虑过使用"免费注册“场景吗?它允许在应用程序中使用COM/ActiveX组件,而无需全局注册ActiveX,并且允许仅基于随应用程序一起包含的XML清单中定义的接口为应用程序加载孤立的COM/ActiveX控件。
有关工具列表,请参阅这个职位,使用Flash和这个分步导轨的示例XML清单,请参阅这个职位。我假设对于Adobe控件,您应该使用C:\Program \Acrobat \ Reader \ActiveX文件夹中的PDF.ocx。
更新(2015年7月27日):在Adobe的最新版本中,他们使用AcroPDF.dll并将其移动到\Program \Common\Acrobat\ActiveX\正如我在Adobe 11中检查过的那样。不幸的是,AcroPDF.dll在试图使用regsvr32.exe安装它时抛出错误。我想,在初始化之前,它会检查一些额外的键,以防止不允许的使用(直到用户在IE中解除了控件的阻塞)。似乎没有办法正式和程序化地绕过用户显式允许PDF控件供非Adobe应用程序使用的要求。
还请参阅讨论有关x64平台上可能出现的问题的内容:更好和更可靠的方法是通过托管IE的WebBrowser控件间接地使用Adobe控件,从而相应地调用嵌入式WebBrowser查看器控件。
https://stackoverflow.com/questions/31255483
复制相似问题