Включение аннотации в Adobe AxAcroPDFLib

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

Collab.showAnnotToolsWhenNoCollab = True

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

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

Ответ 1

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

Acrobat Reader

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

Аналогичный вопрос с автоответчиком был задан на SO (здесь), где OP пришел к выводу, что это поведение по дизайну и ничего не может быть сделано об этом, с которым я согласен, почти.

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

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

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

Конечно, этот комментарий относится к Acrobat 9, он по-прежнему остается действительным для Acrobat XI.

Один последний бит. Я не знаю рамки вашего приложения, поэтому это может быть совершенно неактуальным, но если это коммерческое приложение, даже если вы найдете функциональное обходное решение, я бы не решался его использовать, так как это может нарушить Adobe Лицензионное соглашение для читателя (здесь); в частности раздел 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 (здесь) и посмотрите примерный проект ActiveViewVB, который что я использовал для создания некоторых из этого примера. Для справки я использовал SDK Acrobat XI.