Включение аннотации в Adobe AxAcroPDFLib
Я встроил просмотрщик PDF в C# Winform, используя AxAcroPDFLib
, Однако кнопки аннотаций на панели инструментов (комментарии...) отключены. Я искал и обнаружил, что они отключены по умолчанию, но некоторые сообщили, что позволяют им использовать Javascript:
Collab.showAnnotToolsWhenNoCollab = True
Есть ли способ сделать это здесь?
Изменить: возможно ли использовать плагин браузера в элементе управления WebBrowser? Если так, как это можно сделать?
1 ответ
Обновление - первый раздел относится только к Acrobat Reader. Информацию об использовании полных версий Acrobat см. Во втором разделе.
Acrobat Reader
Я предвосхищу все это, заявив, что это, вероятно, не тот ответ, который вы ищете, но я чувствовал, что это оправдывает больше объяснение, чем просто комментарий.
Аналогичный вопрос с ответом на вопрос был задан в SO ( здесь), где ФП пришел к выводу, что это поведение задуманно, и с этим ничего нельзя поделать, с чем я почти согласен.
Хотя я уверен, что вы уже видели, что Reader сам может добавлять аннотации, единственным простым способом сделать это с помощью плагина Reader (AcroPDFLib) является то, чтобы загружаемый документ был "Reader Enabled", и в этот момент аннотации становятся доступными просто как они есть в Reader. Если у вас есть контроль над документами, которые вы хотите, чтобы плагин загружал, это может быть решением для вас.
На ваш вопрос о возможной настройке Collab.showAnnotToolsWhenNoCollab = True
В качестве обходного пути мои поиски показали, что это приемлемый обходной путь для тех, кто использует полную версию Acrobat, а не Reader. Более конкретно, на форуме Adobe ( здесь) сотрудники Adobe прокомментировали использование этого свойства напрямую:
Нет, речь не идет о разрешении комментирования в Adobe Reader. Речь идет о включении комментирования в браузере для Acrobat Standard или Professional. Если вы хотите включить комментирование в Reader, то вам нужно "включить Reader" сами 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, который я использовал для создания некоторых из этого примера. Для справки я использовал Acrobat XI SDK.