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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Привет, Хабр! Для начала представимся. 

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

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

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

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

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

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

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

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

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

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

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

  • создание объекта документа (включая загрузку файла);

  • создание объекта страницы;

  • рендер страницы в изображение;

  • загрузка аннотаций, текста, и прочей дополнительной информации.

Качество рендера документа мы определяли, учитывая:

  • точность определения размеров,

  • корректность рендера содержимого страницы,

  • стабильность.

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

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

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

  • открытие документов, защищённых и не защищённых паролем;

  • извлечение метаданных о документах;

  • загрузка и рендеринг страниц;

  • рендер страниц в произвольном масштабе для отображения миниатюр или приближения;

  • рендер произвольной части страницы для tile-отображения;

  • получение информации о каждой странице: размер, порядковый номер;

  • получение аннотаций: тип аннотации, размер и положение на странице, цель ссылки;

  • сохранение изменений пользователя для комментариев и заполнения форм;

  • извлечение текста со страниц для копирования текста.

Poppler

PDFium

MuPDF

Технологии 

C++, JavaScript, C#, PHP, Lisp

C++, C#, Python, JavaScript

C, 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/

Интересные статьи

Интересные статьи

Иногда добиться значительного эффекта можно используя совсем незамысловатые средства. Стоит лишь взглянуть на текущее положение дел под другим углом или свежим взглядом.Я...
Вступление KolibriOS – миниатюрная операционная система, ядро и большинство программ которой написано на ассемблере. Это, конечно же, не значит, что на других языках программирования пис...
На конференции Linux Plumbers Conference 2020 разработчики Microsoft рассказали о своем экспериментальном проекте — оптимизации ядра Linux для серверных ARM-процессоров. С докладо...
Я представитель микробизнеса, который делает софт для коммерческих заказчиков из научной сферы. Карантин и вынужденная самоизоляция 2020 года заставили меня искать заказчиков в го...
К публичному размещению акций готовится Canonical — компания-разработчик Ubuntu. Она планирует развиваться в сфере облачных вычислений. / фото NASA (PD) — Марк Шаттлворт на МКС Разговоры об...