Linux на мобилках, PDFium и как рендерить PDF в 2 раза быстрее

Kate

Administrator
Команда форума
Для начала представимся.

— Меня зовут Кирилл Чувилин (@chuvilin), возглавляю отдел развития и поддержки разработчиков в «Открытой мобильной платформе» — российской компании, разрабатывающей программные продукты для мобильных устройств.

— А меня зовут Алексей Федченко (@broomcode), работаю старшим инженером-разработчиком под началом Кирилла.

В этой статье хотим рассказать о том, как мы протестировали три основные открытые библиотеки для работы с PDF-документами: Poppler, PDFium и MuPDF. Сравнили скорость рендера документов разного объёма, качество рендера, требования к технологиям разработки и условия лицензий для коммерческих продуктов на базе этих библиотек. Спойлер: победителем стала библиотека PDFium, но, как всегда, есть нюансы. Ниже обо всём по порядку.

При чём здесь ОС Аврора​

Аврора — операционная система на базе Linux для планшетов и смартфонов. Её используют в крупных компаниях и государственных структурах для обеспечения безопасности информации и коммуникаций. Это единственная мобильная ОС в реестре российского ПО, сертифицированная ФСТЭК и ФСБ.

Аврора POSIX-совместима, поэтому для неё не подходят привычные решения для Android и iOS. В то же время из-за особенностей мобильных устройств далеко не каждое десктопное решение для Linux можно перенести в Аврору.

Необходимость использования отдельной операционной системы возникает в крупных компаниях (особенно часто — в государственных организациях) в основном из-за того, что типовую мобильную ОС с открытым кодом — Android — чаще всего невозможно использовать по причине лицензионных ограничений при производстве.

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

Как сравнивать библиотеки для рендера PDF​

Для оценки библиотек мы использовали две группы параметров: скорость работы и качество рендера.

Скорость работы — это минимальное время, затрачиваемое на операции с документом, в том числе:

  • создание объекта документа (включая загрузку файла);
  • создание объекта страницы;
  • рендер страницы в изображение;
  • загрузка аннотаций, текста, и прочей дополнительной информации.
Качество рендера документа мы определяли, учитывая:

  • точность определения размеров,
  • корректность рендера содержимого страницы,
  • стабильность.
Краткое замечание по поводу стека. ОС Аврора написана на C++ с использованием фреймворка Qt, поэтому необходимо, чтобы библиотека была совместима с C++17 (компилятор GCC), и желательно, чтобы присутствовала поддержка фреймворка Qt.

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

Функциональность библиотеки:

  • открытие документов, защищённых и не защищённых паролем;
  • извлечение метаданных о документах;
  • загрузка и рендеринг страниц;
  • рендер страниц в произвольном масштабе для отображения миниатюр или приближения;
  • рендер произвольной части страницы для tile-отображения;
  • получение информации о каждой странице: размер, порядковый номер;
  • получение аннотаций: тип аннотации, размер и положение на странице, цель ссылки;
  • сохранение изменений пользователя для комментариев и заполнения форм;
  • извлечение текста со страниц для копирования текста.
PopplerPDFiumMuPDF
ТехнологииC++, JavaScript, C#, PHP, LispC++, C#, Python, JavaScriptC, Java
Лицензия и ограниченияТребуется раскрытие исходного кода.
Лицензия: GPLv2
Не требуется раскрытие исходного кода.
Лицензия: Apache
Требуется раскрытие исходного кода.
Лицензия: AGPLv3, также есть коммерческая рецензия.
ФункцииИзвлечение встроенных документов
Создание перечня использованных шрифтов
Извлечение изображений в исходном разрешении
Извлечение метаданных
Извлечение отдельных страниц
Конвертация в векторный или растровый формат через Cairo
Конвертация в HTML с сохранением форматирования
Конвертация страницы в растровое изображение
Конвертация в PS-формат
Извлечение текста
Объединение документов
Сглаживание текста и графики
Вращение страницы
Рендер выделенной области
Рендер и создание документов
Сглаживание текста и графики
Поворот на заданный угол
Перевод в монохромный режим или градации серого
Зеркальное отражение
Извлечение текста
Создание документов
Редактирование документов
Настройки рендеринга, аналогичные другим библиотекам

Сравнение библиотек: скорость​

Для сравнения скорости работы использовались 2 PDF-документа: 37-страничный с большим количеством векторных объектов (это усложняет обработку) и документ на 1713 страницах, содержащих в основном текст и таблицы. Сразу поясним: time class — временной интервал, за который срендерилась страница. Например, если страница срендерилась за 3000 мс, она попадает в интервал [2500–5000]. Столбы характеризуют количество страниц в каждом интервале (абсолютно быстрая библиотека будет иметь только один столбец минимального временного интервала). Данные получены при тестировании на смартфоне Inoi R7 с четырёхъядерным процессором Qualcomm Snapdragon 212 (APQ8009, частота 1,2 GHz) и 2 GB RAM под управлением ОС Аврора.

37 страниц с графикой
37 страниц с графикой
1713 текстовых страниц
1713 текстовых страниц
Быстрее всего справилась MuPDF (2,5 секунды на первый документ, 10 секунд на второй).

Poppler и PDFium оказались близки по скорости обработки простых текстовых страниц, а вот рендер векторных изображений PDFium выполняет заметно быстрее.

В целом, Poppler по скорости работы занял последнее место, MuPDF — первое, а PDFium — твёрдое второе.

Сравнение библиотек: качество​

Чтобы сравнить качество, мы подготовили документ в графическом редакторе Inkscape и экспортировали исходник в PDF и PNG, а по растровому файлу рассчитали коэффициент PNSR (отношение пикового сигнала к уровню фонового шума). Чем он выше, тем лучше качество картинки.

На изображениях ниже показаны результаты: верхняя картинка — результат рендера, средняя — исходник, а в самом низу — рассчитанная с помощью утилиты Magick разность между изображениями (попиксельно).

Poppler collage
Poppler collage
PDFium  collage
PDFium collage
MuPDF collage
MuPDF collage
Худший результат — снова у Poppler (17,47), на втором месте — MuPDF (24,02), а лучший показатель выдал PDFium (29,85).

Так чем же рендерить?​

По большому счёту, всё зависит от вашей задачи.

Poppler популярен, но результаты показывает хуже, чем конкуренты: работает медленнее, а качество рендера получается низким. Кроме того, лицензия не позволяет разрабатывать проприетарный софт.

PDFium чуть отстаёт от MuPDF в некоторых специфических задачах, но в целом показывает такую же производительность, зато качество — выше, а лицензия не требует публикации исходного кода.

MuPDF работает быстрее всех, но лицензия требует раскрытия исходного кода финального проекта — зачастую это просто невозможно.

Источник статьи: https://habr.com/ru/company/omprussia/blog/568704/
 
Сверху