.net 如何以编程方式启用/禁用';在浏览器中显示PDF';用于Adob/ActiveX控件的杂技/阅读器席

.net 如何以编程方式启用/禁用';在浏览器中显示PDF';用于Adob/ActiveX控件的杂技/阅读器席,.net,pdf,com,adobe,activex,.net,Pdf,Com,Adobe,Activex,我们有一个使用Adobe ActiveX控件的.NET C#应用程序。对于7-10版本的Adobe Acrobat和Adobe Reader,要使用此控件,需要打开“在浏览器中显示PDF”设置。您可以使用 Preferences > Internet > Display PDFs in browser 或者通过直接设置注册表设置以编程方式进行 HKEY_CURRENT_USER\Software\Adobe\(Product Name)\(Version)\Originals "b

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

Preferences > Internet > Display PDFs in browser
或者通过直接设置注册表设置以编程方式进行

HKEY_CURRENT_USER\Software\Adobe\(Product Name)\(Version)\Originals
"bBrowserIntegration"=dword:00000001
它遵循SDK引用。当我们的客户拥有7-10版本的Adobe Reader或Adobe Acrobat时,我们的应用程序一直在以编程方式使用此注册表值的设置。上面的链接还表明,在席(11)中,这个<代码> BBuffSerials注册表项被禁止。新版本中仍存在旧的注册表路径,即:

HKEY_CURRENT_USER\Software\Adobe\(Product Name)\(Version)\Originals
但是,不再有
bBrowserIntegration
键,正如文档所示,它已被弃用

虽然Adobe ActiveX控件在浏览器席上显示PDF,但它始终是这样的。 <席>(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错误
,然后如果我们按照上面链接中的说明启用设置,那么我们的应用程序一切正常,它使用Adobe ActiveX控件呈现PDF,这与我们在旧版本(7-10)中未设置注册表设置时所看到的类似(请参阅我以前的文章和我自己的解决方案)

所以,问题仍然是,在今天席或DC的手工过程中,预期的程序等价物是什么?或者通过设置注册表设置“代码> BBurSerialSimult”来等效于7-10中的工作。我们希望能够将其打开,然后在应用程序结束时将其重置为以前的设置(因此,我们的应用程序不会因为应用程序需要而强制用户保留该设置),这就是我们今天为7-10所做的

从开发人员的角度来看,我似乎找不到任何关于如何启用/禁用浏览器集成的在线参考,这样我们的应用程序就可以继续使用ActiveX控件,而不会出现COM错误,从而迫使用户手动更改


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

您考虑过使用“”场景吗?它允许在应用程序中使用COM/ActiveX组件,而无需全局注册ActiveX,并允许仅基于应用程序随附的XML清单中定义的接口加载应用程序的独立COM/ActiveX控件

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

更新(2015年7月27日):在最新版本的Adobe Reader中,他们使用AcroPDF.dll并将其移动到\Program Files\Common Files\Adobe\Acrobat\ActiveX\中,正如我在Adobe Reader 11中检查的那样。不幸的是,AcroPDF.dll在尝试使用regsvr32.exe安装时抛出错误。我想它会在初始化之前检查一些额外的密钥,以防止不允许的使用(直到用户在IE中取消阻止控件)。对于用户明确允许非Adobe应用程序使用PDF控件的要求,似乎没有正式和编程的方法


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

您是否将
WebBrowser
控件导航到PDF文件?或者直接托管Acrobat Reader ActiveX?我们在应用程序中使用Adobe Acrobat ActiveX控件的应用程序间托管来显示PDF,而不是在应用程序中使用web浏览器控件。使用ActiveX控件需要“在浏览器中显示pdf”设置,就像使用IE本身显示PDFThanks一样,听起来很有趣,但我不清楚这将如何解决眼前的问题。据我所知,我们没有注册问题。我们在应用程序中提供的Adobe ActiveX库(AxAcroPDFLib.dll和AcroPDFLib.dll)设计用于与安装的任何PDF程序(Reader或Acrobat)交互,要求将设置“在浏览器中显示PDF”从版本7-10改为版本7-10,否则我们会收到COM错误。刚刚删除/移动了11&DC的设置,现在有一个安装选项可以设置此设置。此设置会影响COM错误是否显示。这有助于使用Adobe Reader activex控件,即使该控件未在系统中注册(即,在IE中不可用),只需从XML清单中引用它即可,因此它仅在应用程序全局注册时才可用于应用程序。可以使用flash player控件,但需要尝试使用Adobe Reader,以确保它也能正常工作。当你说“即使它未在系统中注册”。。。您是说,这与以前版本的“首选项”中的“在浏览器中显示PDF”设置所产生的影响相同吗?据我所知,这是一个注册问题,而不是注册问题。主要目标是如何启用当前等效于我们可以在注册表中访问的设置,而不是启用此设置时我们正在“注册”任何内容。你是说这两件事是一样的吗?“使用ActiveX控件需要“在浏览器中显示pdf”设置,就像使用IE本身来显示P一样