Обновление - Первый раздел относится только к 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.
Есть ли способ использовать javascript из плагина? – Jerry
Надеюсь, если кто-то найдет способ сделать это или обходной путь. – Jerry
Возможно ли использовать плагин браузера в элементе управления WebBrowser? Если да, то как это можно сделать? – Jerry