Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022)
Материал из 0x1.tv
- Докладчик
- Алексей Федченко
В докладе описывается реализация библиотеки и приложения для просмотра PDF-документов.
Рассказывается про взаимодействие со структурой документа (страницы, текст, аннотации, заметки), а также особенности рендеринга контента (в том числе, ограничения видеобуфера, отрисовка тайлами и масштабирование). Полученное решение основано на технологиях Qt Quick и PDFium. Оно может быть удобно использовано в приложениях, написанных с использованием фреймворка Qt, в том числе для ОС Аврора.
Содержание
Видео
Презентация
Thesis
ОС Аврора — это российский POSIX-совместимый дистрибутив Linux, предназначенный для использования на смартфонах и планшетах корпоративными заказчиками и государственными компаниями.
Экосистема приложений ОС Аврора обеспечивается как стандартными приложениями, доступными на устройствах «из коробки» (голосовые вызовы, сообщения, браузер, заметки и т. п.), так и приложениями, разрабатываемым третьими лицами: продуктами партнёров компании или специализированным программным обеспечением (ПО).
Одной из наиболее востребованных функции корпоративного ПО является работа с документами в формате PDF: просмотр, аннотирование, переход по ссылкам. Это порождает задачи, требующие интеграции функций для работы с PDF в другие приложения: системы электронного документооборота, подпись документов, платёжные системы и др.
Поэтому возникает вопрос о том, какие доступны средства разработки, позволяющие взаимодействовать с документами в формате PDF [1], [2], [3].
Технически могут быть использованы любые POSIX-совместимые решения [4], [5].
Однако условия их применения на мобильных устройствах, которые уступают в производительности ПК, накладывают требования к скорости работы. А потребность использования в сторонних приложениях обуславливает необходимость пермиссивной лицензии.
В статье[1] описан выбор библиотеки для работы с PDF, которая может быть использована для таких целей c учётом всех требований. Наиболее подходящей оказалась PDFium — библиотека с открытым исходным кодом от Google, распространяющаяся под лицензией MIT. Решение, описываемое в докладе, основано именно на ней.
Основным фреймворком для разработки прикладного ПО для ОС Аврора является Qt версии 5.6 а интерфейс пользователя реализуется с помощью QML. Это означает, что для удобства использования в приложениях нужно обеспечить совместимость PDFium и Qt. Есть решения, которые реализуют подобное связывание:
- Библиотека QtPDF предоставляется разработчиками Qt, но её лицензия GPLv3 требует раскрытия исходного кода конечного приложения, что делает её неподходящей для большинства прикладных коммерческих приложений.
- QtPDFium — это неофициальная библиотека. Она распространяется под удобной лицензией BSD, но при этом использует непубличный API и привязана к устаревшей версии PDFium. Кроме того, поддержка библиотеки прекращена.
Таким образом, для свободного использования актуальной версии PDFium совместно с Qt потребовалось разработать новое связующее ПО.
При реализации связующего ПО и приложения его использующего, возникает ряд задач, обусловленных как функциональными требованиями, так и техническими ограничениями:
- как обеспечить асинхронную обработку данных, которую активно использует Qt Quick, при условии строгой однопоточности PDFium;
- как отрендерить и отрисовывать страницу, разрешение которой превышает размер видеобуфера устройства;
- как реализовать представление списка страниц с корректной прокруткой и эффективным вычислением текущего положения при условии, что страницы могут быть разных пропорций;
- как масштабировать одну страницу и список страниц;
- как сделать взаимодействие пользователя с гиперссылками и другими элементами навигации;
- каким образом реализовать выделение и копирование текстовых данных;
- как организовать работу с заметками в документе.
В докладе описываются выбранные подходы для решения указанных задач на примере библиотеки AmberPDF и приложения Tiny PDF Viewer, которые были реализованы и предоставляются для удобства работы c PDF в приложениях для ОС Аврора, но также могут быть полезны и при разработке других приложений, основанных на Qt и работающих с PDF.
Примечания и ссылки
- ↑ Alexey Fedchenko and Kirill Chuvilin, PDF Document Rendering on Mobile Devices in the Case of Aurora OS, book29th Conference of Open Innovations Association, p. 118—124, 2021, FRUCT