Как предоставить обработчик события для объекта JavaScript, доступ к которому осуществляется через интерфейс COM

Я использую COM-интерфейс Adobe Acrobat для управления содержимым документа PDF, размещенного в окне, предоставленном моим приложением.

Похоже, что Adobe приостановила разработку интерфейса COM примерно в 2006 году. Хотя библиотека типов Acrobat предоставляет доступ к довольно ограниченному набору функций, интерфейс COM не обеспечивает прямой доступ ко многим функциям, доступным в меню + панели инструментов приложения Acrobat. В эти дни они ожидают, что вы будете работать через их JavaScript API.

Библиотека типов Acrobat позволяет получить доступ к объекту JavaScript, связанному с конкретным документом. Например, следующее переворачивает первую страницу документа с ног на голову:

[...]
var
  Doc : CAcroPDDoc; // interface Acrobat document
  vJS : OleVariant; // access to JavaScript object  
begin

  Doc := CoAcroPDDoc.Create; 
  Doc.Open(AFileName);
  try
    vJS := Doc.GetJSObject;
    try
      vJS.SetPageRotations(0, 0, 180);
    finally
      VarClear(vJS);
    end;
  finally
    Doc := Nil;
  end; 

end;

Это прекрасно работает, когда я хочу просто вызвать метод одного из объектов в JavaScript API Acrobat. Мой вопрос: как мне связать код моего приложения с событиями, которые предоставляют некоторые из этих объектов? Например, есть даже JS, который возникает, когда пользователь щелкает закладку в документе - как бы я предоставил обработчик событий для чего-то подобного?

Я знаю, как реализовать исходящий интерфейс и подключить его к COM-объекту через ConnectionPointContainer/FindConnectionPoint. Но я понятия не имею, как подключиться к событию JS для объекта, к которому я обращаюсь (с помощью вызова, как GetJSObject выше), который находится на другой стороне интерфейса COM-объекта. Так что это не тот случай, когда я могу пока "показать свой код", потому что я не знаю, с чего начать.

0 ответов

Другие вопросы по тегам