Adobe Reader ActiveX + QAxWidget; Получение текущей страницы
Я пытаюсь встроить Abode Reader в мое приложение win, сама цель - простой просмотр документов PDF из этого приложения, никаких бесплатных библиотек рендеринга (GPL не будет), так что это мое решение. QAxWidget решил большую часть проблемы, но мне также нужно знать некоторую незначительную информацию, например номер текущей страницы.
Попытка вроде:
ui->axWidget-> dynamicCall("LoadFile(const QString &)", "C:/sample.pdf"); // works fine
Кажется, есть хорошая ссылка: Справочник по Interapplication Communication API - Adobe
Все методы из AxAcroPDFLib.AxAcroPDF
Объект называется нормально и работает нормально. Но это сеттеры, для добытчиков AcroExch.AVPageView
не требуется, хотя ни Qt Creator, ни ручной поиск, даже ui->axWidget->querySubObject("something")
предложить мне (другой?) подходящий объект ActiveX для него. GetActiveDoc()
можно вызвать из AcroExch.App
объект, с которого мне тоже некуда деться.
Вопрос заключается в следующем: как вообще возможно получить номер текущей страницы через AciveX?
1 ответ
Блин, я немного тупой, через некоторое время нашел ответ.
Все "получатели", такие как методы получения номера текущей страницы, общего количества страниц, текущего масштаба и т. Д., Поддерживаются другим объектом ActiveX, AcroExch.AVPageView (если он включен в AcroExch.App, то есть), если быть точным.
Подробная информация в справочнике Adobe, здесь: IACReference
Но ключевым моментом является то, что сам Adobe Reader предоставляет только объект AxAcroPDFLib.AxAcroPDF с "сеттерами" и ничего более, даже через сообщения DDE. Кажется, что полная функциональность доступна только в Adobe Acrobat, который не является бесплатным и лицензируется / приобретается обычным коммерческим способом.
Таким образом, как у Adobe, вы можете использовать ограниченные OLE-методы Reader или приобрести Acrobat.