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

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

== Thesis ==
* https://community.omprussia.ru/open_source

[https://auroraos.ru/ ОС Аврора]   это российский POSIX-совместимый дистрибутив Linux,
предназначенный для использования на смартфонах и планшетах корпоративными заказчиками и государственными компаниями.

[https://auroraos.ru/applications Экосистема приложений ОС Аврора] обеспечивается
как стандартными приложениями, доступными на устройствах «из коробки»
(голосовые вызовы, сообщения, браузер, заметки и т. п.),
так и приложениями, разрабатываемым третьими лицами:
продуктами партнёров компании или специализированным программным обеспечением (ПО).

Одной из наиболее востребованных функции корпоративного ПО является работа с документами в формате PDF:
просмотр, аннотирование, переход по ссылкам.
Это порождает задачи, требующие интеграции функций для работы с PDF в другие приложения:
системы электронного документооборота, подпись документов, платёжные системы и др.

Поэтому возникает вопрос о том, какие доступны средства разработки,
позволяющие взаимодействовать с документами в формате PDF [https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf], [https://resources.infosecinstitute.com/topic/pdf-file-format-basic-structure], [https://www.iso.org/standard/51502.html].

Технически могут быть использованы любые POSIX-совместимые решения [https://standards.ieee.org/project/1003_1.html], [https://en.wikipedia.org/wiki/List_of_PDF_software#Linux_and_Unix].

Однако условия их применения на мобильных устройствах, которые уступают в производительности ПК,
накладывают требования к скорости работы.
А потребность использования в сторонних приложениях обуславливает необходимость пермиссивной лицензии.

В&nbsp;статье<ref name="fedchenko-chuvilin_fruct29">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</ref> описан выбор библиотеки для работы с&nbsp;PDF,
которая может быть использована для таких целей c&nbsp;учётом всех требований.
Наиболее подходящей оказалась [https://github.com/paulovap/qtpdfium PDFium]  
библиотека с&nbsp;открытым исходным кодом от&nbsp;Google,
распространяющаяся под лицензией [http://www.linfo.org/mitlicense.html MIT].
Решение, описываемое в&nbsp;докладе, основано именно на&nbsp;ней.

Основным фреймворком для разработки прикладного&nbsp;ПО для ОС&nbsp;Аврора является [https://qt.io Qt]&nbsp;версии&nbsp;5.6 а&nbsp;интерфейс пользователя реализуется с&nbsp;помощью [https://doc.qt.io/qt-5/qmlapplications.html QML].
Это означает, что для удобства использования в&nbsp;приложениях нужно обеспечить совместимость PDFium и&nbsp;Qt.
Есть решения, которые реализуют подобное связывание:

* Библиотека [https://marketplace.qt.io/products/qtpdf QtPDF] предоставляется разработчиками&nbsp;Qt,   но&nbsp;её лицензия [http://www.gnu.org/licenses/gpl-3.0.html GPLv3] требует раскрытия исходного кода конечного приложения,     что делает её&nbsp;неподходящей для большинства прикладных коммерческих приложений.
* [https://github.com/paulovap/qtpdfium QtPDFium]   это неофициальная библиотека. Она распространяется под удобной [http://www.linfo.org/bsdlicense.html лицензией BSD], но&nbsp;при этом использует непубличный API и&nbsp;привязана к&nbsp;устаревшей версии PDFium. Кроме того, поддержка библиотеки прекращена.

Таким образом, для свободного использования актуальной версии PDFium совместно с&nbsp;Qt
потребовалось разработать новое связующее&nbsp;ПО.

При реализации связующего&nbsp;ПО и приложения его использующего,
возникает ряд задач, обусловленных как функциональными требованиями,
так и техническими ограничениями:

* как обеспечить асинхронную обработку данных, которую активно использует Qt&nbsp;Quick,    при условии строгой однопоточности PDFium; 
* как отрендерить и&nbsp;отрисовывать страницу, разрешение которой превышает размер видеобуфера устройства;
* как реализовать представление списка страниц с&nbsp;корректной прокруткой и&nbsp;эффективным вычислением текущего положения при условии, что страницы могут быть разных пропорций;
* как масштабировать одну страницу и&nbsp;список страниц; 
* как сделать взаимодействие пользователя с&nbsp;гиперссылками и&nbsp;другими элементами навигации;
* каким образом реализовать выделение и&nbsp;копирование текстовых данных;
* как организовать работу с&nbsp;заметками в&nbsp;документе.

В&nbsp;докладе описываются выбранные подходы для решения указанных задач
на&nbsp;примере библиотеки AmberPDF и&nbsp;приложения Tiny&nbsp;PDF&nbsp;Viewer,
которые были реализованы и&nbsp;предоставляются для удобства работы c&nbsp;PDF в&nbsp;приложениях для ОС&nbsp;Аврора,
но&nbsp;также могут быть полезны и&nbsp;при разработке других приложений, основанных на&nbsp;Qt и&nbsp;работающих с&nbsp;PDF.


{{----}}
[[File:{{#setmainimage:Использование PDFium совместно с Qt Quick для отображения PDF-документов в ОС Аврора (Алексей Федченко, OSSDEVCONF-2022)!.jpg}}|center|640px]]
{{LinksSection}}
<!-- <blockquote>[©]</blockquote> -->

<references/>

[[Категория:OSSDEVCONF-2022]]
[[Категория:Draft]]

Версия 18:10, 17 марта 2024

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

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

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

Видео

Презентация

Использование 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