Как программно включить / отключить отображение PDF в браузере для Acrobat / Reader XI или DC для использования с Adobe ActiveX Control

У нас есть приложение .NET C #, которое использует элементы управления Adobe ActiveX. Для версий 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 http://www.adobe.com/devnet-docs/acrobatetk/tools/PrefRef/Windows/Originals.html#BrowserIntegration. Наше приложение использует программную настройку этого значения реестра, когда у наших клиентов есть версии 7-10 Adobe Reader или Adobe Acrobat. Ссылка выше также указывает на то, что этот bBrowserIntegration раздел реестра устарел в XI (11). Старый путь реестра по-прежнему существует в новых версиях, то есть:

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

однако ключа bBrowserIntegration больше нет, как указано в документации, он устарел.

Похоже, что элемент управления Adobe ActiveX по-прежнему отлично работает с XI и DC, пока включен Отображать PDF в браузере, как всегда.

Для версий 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, а затем, если мы включим настройку, следуя инструкциям в приведенной выше ссылке, все работает как ожидалось с нашим приложением, он отображает PDF-файлы с помощью Adobe ActiveX Control, что похоже на то, что мы ожидаем увидеть в более старых версиях (7-10), когда параметр реестра не был установлен (см. мой старый пост и мое собственное решение назад затем Как диагностировать причину, исправить ошибку 0x80004005, связанную с Adobe ActiveX / COM или обойти ее программно?).

Итак, остается вопрос, каков ожидаемый программный эквивалент ручного процесса в XI или DC сегодня или эквивалент того, что работал в 7-10, путем установки соответствующего параметра реестра bBrowserIntegration. Мы хотим иметь возможность включить его, а затем сбросить его до предыдущего значения, когда наше приложение завершится (чтобы наше приложение не заставляло пользователя сохранять настройку только потому, что нашему приложению это нужно), что мы делаем сегодня для 7 -10.

Кажется, я не могу найти в Интернете ссылок на то, как включить / отключить интеграцию браузера с точки зрения разработчика, чтобы наше приложение могло продолжать использовать элемент управления ActiveX и не отображать ошибки COM, вынуждая пользователя изменять это вручную.

Первоочередной задачей является понимание решения для DC, поскольку оно представляет новую парадигму для Adobe Acrobat / Reader.


person Streamline    schedule 06.07.2015    source источник
comment
Вы перемещаете WebBrowser элемент управления в файл PDF? Или напрямую разместить Acrobat Reader ActiveX?   -  person noseratio    schedule 07.07.2015
comment
Мы используем внутренний хостинг Adobe Acrobat ActiveX Control в нашем приложении для отображения PDF-файлов, а НЕ с помощью элемента управления веб-браузера в приложении. Для использования элемента управления ActiveX требуются настройки «отображать PDF-файл в браузере», как если бы вы использовали сам IE для отображения PDF-файла.   -  person Streamline    schedule 07.07.2015


Ответы (1)


Рассматривали ли вы использование сценария «без регистрации»? Он позволяет использовать компоненты COM / ActiveX в вашем приложении без глобальной регистрации ActiveX и позволяет загружать изолированный элемент управления COM / ActiveX для вашего приложения только на основе интерфейсов, определенных в XML-манифесте, включенном вместе с вашим приложением.

См. этот пост для получения списка инструментов и эта публикация для образца XML-манифеста для использования плагина Flash и этого пошаговое руководство. Я предполагаю, что для управления Adobe Reader вы должны использовать PDF.ocx из папки C: \ Program Files \ Adobe \ Acrobat \ Reader \ ActiveX.

ОБНОВЛЕНИЕ (27 июля 2015 г.): в последних версиях Adobe Reader используется AcroPDF.dll, который перемещен в \ Program Files \ Common Files \ Adobe \ Acrobat \ ActiveX \, как я проверял с помощью Adobe Reader 11. К сожалению, AcroPDF.dll выдает ошибку при попытке установить его с помощью regsvr32.exe. Я предполагаю, что он проверяет некоторые дополнительные ключи перед инициализацией, чтобы защитить от недопустимого использования (до тех пор, пока пользователь не разблокирует элемент управления в IE). Похоже, что не существует способа официально и программно обойти требование для пользователя явно разрешить управление PDF-файлами для использования приложениями, не принадлежащими Adobe.

Также см. обсуждение возможных проблем на платформе x64: лучший и надежный способ - использовать Adobe Reader управляет косвенно, размещая элемент управления IE WebBrowser, который соответственно вызывает встроенный элемент управления просмотрщика PDF.

person Eugene    schedule 20.07.2015
comment
Спасибо, звучит интересно, но мне непонятно, как это решит ближайшую проблему. Насколько я могу судить, у нас нет проблем с регистрацией. Библиотеки Adobe ActiveX (AxAcroPDFLib.dll и AcroPDFLib.dll), которые мы предоставляем в нашем приложении, предназначенные для взаимодействия с любой установленной программой PDF (Reader или Acrobat), требовали, чтобы параметр Отображать PDF в браузере был отключен с версии 7-10, или мы получить ошибку COM. Настройки были только что удалены / перемещены для 11 и DC, и теперь это задается параметром установки. Этот параметр влияет на то, появляется ли ошибка COM или нет. - person Streamline; 20.07.2015
comment
Это может помочь использовать элемент управления ActiveX Adobe Reader, даже если он не зарегистрирован в системе (т. Е. Недоступен в IE), просто ссылаясь на него из XML-манифеста, чтобы он был доступен для вашего приложения только в том случае, если он был зарегистрирован глобально. Это можно сделать с помощью флеш-плеера, но нужно попробовать с Adobe Reader, чтобы убедиться, что он работает и с ним. - person Eugene; 20.07.2015
comment
Когда вы говорите, что даже если он не зарегистрирован в системе ... вы говорите, что это то же самое, что и то, что происходило с настройкой предыдущей версии Отображать PDF в браузере в настройках? Насколько я могу судить, это проблема реестра, а не регистрации. Основная цель - как включить текущий эквивалент того, что раньше было параметром, к которому мы могли получить доступ в реестре, а не о том, что мы что-то регистрировали, когда включаем этот параметр. Вы говорите, что это одно и то же? - person Streamline; 22.07.2015
comment
Для использования элемента управления ActiveX требуются настройки «отображать PDF-файл в браузере», как если бы вы использовали сам IE для отображения PDF-файла - это означает, что если пользователь включает это, Adobe Reader регистрирует COM-объект (PDF.ocx), и он становится доступным. для IE, для вашего приложения и других. После отключения пользователем Adobe Reader отменяет регистрацию этого глобального COM-объекта (т. Е. Элемента управления средством просмотра). Вот почему я предлагаю вам попробовать сценарий без регистрации, который может помочь вам использовать PDF.ocx, даже если он не зарегистрирован глобально. - person Eugene; 23.07.2015
comment
другими словами, попробуйте зарегистрировать элемент управления PDF com для IE вручную с помощью команды: regsvr32 c: \ Program Files \ Adobe \ Acrobat 6.0 \ Reader \ ActiveX \ pdf.ocx в режиме администратора - person Eugene; 23.07.2015
comment
Спасибо за ваше объяснение. Теперь я понимаю, почему вы предлагаете бесплатную регистрацию. С указанием на использование pdf.ocx, является ли он заменой библиотек Adobe ActiveX (AxAcroPDFLib.dll и AcroPDFLib.dll), которые мы предоставляем в нашем приложении? Эта часть мне еще не ясна. Заменяет ли pdf.ocx эти два, и мы можем переключиться, и нам больше не нужно предоставлять эти dll вместе с нашим приложением? - person Streamline; 23.07.2015
comment
Кроме того, я только что нашел этот adobe.com/support/techdocs/318268.html и внизу написано, что Acrobat Control разработан специально для использования с Internet Explorer; это не полнофункциональный элемент управления ActiveX, который можно использовать для включения приложений, отличных от Internet Explorer, для отображения файлов PDF. поэтому мне интересно, действительно ли этот PDF.ocx тот же самый элемент управления COM, который использует наша текущая реализация Adobe ActiveX, или это какой-то другой COM-объект? А также этот forum.adobe.com/thread/746286 vi - person Streamline; 23.07.2015
comment
Как и этот forum.adobe.com/thread/746286, который читает PDF.OCX, был ОЧЕНЬ СТАРЫЙ (до Acrobat 8) НЕ ПОДДЕРЖИВАЕМЫЙ компонент. Начиная с Acrobat 8, мы предлагаем AcroPDF.dll, который является ПОДДЕРЖИВАЕМОЙ частью SDK. что заставляет меня любопытствовать, не является ли этот PDF.ocx путем, который не является частью текущей реализации Adobe Reader DC. Вы знаете подробности или объяснения? - person Streamline; 23.07.2015
comment
Да, они переместили AcroPDF.dll в \ Program Files \ Common Files \ Adobe \ Acrobat \ ActiveX \, и я только что проверил с помощью Adobe Reader 11. К сожалению, AcroPDF.dll выдает ошибку при попытке установить его с помощью regsvr32.exe. Я предполагаю, что он проверяет некоторые дополнительные ключи перед инициализацией, чтобы защитить от недопустимого использования (пока пользователь не разблокирует его в IE). Вот несколько дополнительных ссылок, по которым вы можете проверить experts-exchange.com/Software / Internet_Email / Web_Browsers / и forum.adobe.com/thread/1475520 ( относительно использования на платформе x64). - person Eugene; 23.07.2015
comment
И похоже, что нет способа официально и программно обойти требование для пользователя явно разрешить управление PDF для использования приложениями, не принадлежащими Adobe. - person Eugene; 23.07.2015