2015-05-03 4 views
11

Я встроил средство просмотра PDF в C# Winform, используя AxAcroPDFLib. Однако кнопки аннотации на панели инструментов (комментарии ...) отключены. я искал и нашел, что они отключены по умолчанию, но некоторые из них сообщили что позволяет использовать их Javascript:Включение аннотации в Adobe AxAcroPDFLib

Collab.showAnnotToolsWhenNoCollab = True 

Есть ли способ сделать это здесь?

Редактировать: Возможно ли использовать плагин браузера в элементе управления WebBrowser? Если да, то как это можно сделать?

+0

Есть ли способ использовать javascript из плагина? – Jerry

+0

Надеюсь, если кто-то найдет способ сделать это или обходной путь. – Jerry

+1

Возможно ли использовать плагин браузера в элементе управления WebBrowser? Если да, то как это можно сделать? – Jerry

ответ

6

Обновление - Первый раздел относится только к Acrobat Reader. Информацию о том, как использовать полные версии Acrobat, см. Во втором разделе.

Acrobat Reader

Я предварить все это, заявив, что это, вероятно, не ответ, который вы ищете, но я чувствовал, что это заслуживает более объяснения, чем просто комментарий.

Спрашивается вопрос о SO (here), где ОП пришел к выводу, что это поведение по дизайну, и с этим ничего нельзя сделать, о чем я почти согласен.

Хотя я уверен, что вы видели, что сам Reader может добавлять аннотации, единственное прямое средство достижения этого с помощью плагина Reader (AcroPDFLib) - это для загружаемого документа как «Reader Enabled», после чего аннотации становятся доступными так же, как и в Reader. Если у вас есть контроль над документами, которые вы хотите загрузить плагином, это может быть решением для вас.

На ваш вопрос о возможной установке Collab.showAnnotToolsWhenNoCollab = True в качестве обходного пути мои поисковые запросы показали, что это является жизнеспособным обходным решением для тех, кто использует полную версию Acrobat, а не Reader. Более конкретно, на форуме Adobe (here), штатный Adobe прокомментировал использование этого свойства непосредственно:

Нет, это не [о разрешении комментариев в Adobe Reader]. Это о включении комментирования в браузере для Acrobat Standard или Professional. Если вы хотите включить комментирование в Reader, то вам необходимо, чтобы «Reader Enable» сами PDF-файлы использовали Acrobat professional или Adobe Livecycle Reader Extension Server.

Настоящий комментарий относится к Acrobat 9, он по-прежнему действителен для Acrobat XI.

Последний бит. Я не знаю рамки вашего приложения, поэтому это может быть совершенно неактуальным, но если это коммерческое приложение, даже если вы найдете функциональное обходное решение, я бы не решался его использовать, так как это может нарушить Adobe Лицензионный договор для читателя (here); в частности раздел 4.3.3 «Отключенные функции». Краткая версия, как и большинство компаний, не хочет, чтобы вы обошли защиту.

Полных версии Acrobat

Следующий код будет создать программу просмотр PDF (с помощью окна формы к рисованию), открыть PDF, а затем установить collab.showAnnotToolsWhenNoCollab = true, чтобы аннотации на открытом PDF. Для этого требуется ссылка на библиотеку типа Acrobat.

void CreatePdfViewerAndOpenFile(string pdfFile) 
{ 
    short AV_DOC_VIEW = 2; 
    short PDUseBookmarks = 3; 
    short AVZoomFitWidth = 2; 

    Type AcroExch_AVDoc = Type.GetTypeFromProgID("AcroExch.AVDoc"); 
    _acroExchAVDoc = (Acrobat.CAcroAVDoc)Activator.CreateInstance(AcroExch_AVDoc); 
    bool ok = _acroExchAVDoc.OpenInWindowEx(pdfFile, this.Handle.ToInt32(), AV_DOC_VIEW, -1, 0, PDUseBookmarks, AVZoomFitWidth, 0, 0, 0); 

    if (ok) 
    { 
     CAcroPDDoc pdDoc = (CAcroPDDoc)_acroExchAVDoc.GetPDDoc(); 
     object jsObj = pdDoc.GetJSObject(); 
     Type jsObjType = jsObj.GetType(); 
     object collab = jsObjType.InvokeMember("collab", 
      BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance, 
      null, jsObj, null); 

     jsObjType.InvokeMember("showAnnotToolsWhenNoCollab", 
      BindingFlags.SetProperty | BindingFlags.Public | BindingFlags.Instance, 
      null, collab, new object[] { true }); 
    } 
} 

Вызовите этот метод из любого места, где хотите отобразить PDF. Когда закончите, обязательно вызовите метод Close или файл PDF останется открытым в процессе Acrobat в фоновом режиме.

_acroExchAVDoc.Close(-1); 

Имейте в виду, что много «нормальных» функциональность остается из этого примера, как обработка форм изменения размеров и т.д., но это должно вам начать работу. Поскольку в этом примере изменение размера не обрабатывается, вы, вероятно, захотите максимизировать форму перед вызовом метода, чтобы зритель был достаточно большим, чтобы быть полезным. Для получения дополнительной информации о том, как использовать средство просмотра таким образом, загрузите Acrobat SDK (here) и посмотрите примерный проект ActiveViewVB, который я использовал для создания некоторых из этого примера. Для справки я использовал SDK Acrobat XI.

+0

Спасибо, но у меня есть полная версия Acrobat, и я все еще не могу заставить ее работать. Возможно, он доступен только в версии веб-плагина, но я не знаю, как это использовать. – Jerry

+0

спасибо. Это очень полезно. Теперь я могу использовать аннотации. Но проблем по-прежнему мало: 1. Кнопка сохранения на панели инструментов отключена даже после добавления аннотаций. 2. Размер кнопок панели инструментов (и всего остального) намного больше, чем в Adobe Acrobat (выглядит как другое разрешение, чем рабочий стол). Обе проблемы показаны на прилагаемом изображении: http://oi57.tinypic.com/2vxfzvb.jpg. Я использую Adobe Acrobat DC. – Jerry

+0

Я попробовал на другой машине, в которой есть Adobe acrobat pro 9. Последний InvokeMember падает с ошибкой «System.Runtime.InteropServices.COMException (0x80010105): сервер выбрал исключение. (Исключение из HRESULT: 0x80010105 (RPC_E_SERVERFAULT))» и средство просмотра событий показывает ошибки в модулях annots.api и escript.api. – Jerry

Смежные вопросы