Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022)

Материал из 0x1.tv

Докладчик
Алексей Федченко

В докладе описывается реализация библиотеки и приложения для просмотра PDF-документов.

Рассказывается про взаимодействие со структурой документа (страницы, текст, аннотации, заметки), а также особенности рендеринга контента (в том числе, ограничения видеобуфера, отрисовка тайлами и масштабирование). Полученное решение основано на технологиях Qt Quick и PDFium. Оно может быть удобно использовано в приложениях, написанных с использованием фреймворка Qt, в том числе для ОС Аврора.

Видео

on youtube

Презентация

Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022).pdf

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.


Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022)!.jpg

Примечания и ссылки

  1. 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