home

Скорость рендеринга PDF

Разные программы рендеринга имеют разную скорость рендеринга в различные форматы. Скорость зависит от разных параметров и цель настоящей статьи - дать ориентиры в каком случае какой рендерер будет быстрее.

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

Тестируемые книги:

Книга А, 95 стр. 150МБ, оцифрованные копии "Крестьянское движение в Шадринском уезде".

Книга Б, 128 стр. 1МБ, текст с таблицами "Физическая культура в процессе формирования компетенции саморазвития личности студента вуза" ч.3, Игошев, Оплетин.

Конвертация всех страниц в один проход под Windows

В тесте происходит конвертация всех страниц последовательно из исходного PDF в различные выходные форматы при плотности пикселей 300DPI.

Представлено общее время конвертации и среднее время на одну страницу.

форматконвертацияА (на страницу)Б (НА СТРАНИЦУ)А (всех)Б (всех)
pdf to jpegpoppler0.950.519065
 ghsotscript1.630.4515558
 graphicsmagick1.361.23129158
 pdfbox3.180.98 (with errors)302124
pdf to pngmupdf4.400.9241887
 ghostscript5.940.91564116
 graphicsmagick7.261.50690192
 poppler22.12.982095370
 pdfbox6.924.48657573
pdf to pdf (split)pdfbox1.870.021783
 ghostscript0.440.264233
 poppler10.21.24964118
pdf to svgmupdf0.13crush12crush
 poppler0.460.04445.11
 
Конвертация всех страниц осуществлялась командами:
 
gm.exe convert -density 300x300 -quality 75 +adjoin pdf\1635.pdf test\graphicsmagick/page-%d.jpg
 
gswin64c.exe -sDEVICE=jpeg -q -dNOPAUSE -dBATCH -dPDFSETTINGS=/ebook -sOutputFile=test\ghostscript/page-%d.jpg -r300x300 -dJPEGQ=75 pdf\1635.pdf
 
gswin64c.exe -sDEVICE=pdfwrite -q -dNOPAUSE -dBATCH -dPDFSETTINGS=/ebook -sOutputFile=test\ghostscript/page-%d.pdf -r300x300 -dJPEGQ=75 pdf\1635.pdf
 
pdftocairo.exe -jpeg -r 300.0 pdf\1635.pdf  test\poppler/page
 
pdfseparate.exe pdf\1635.pdf test\poppler/page-%d.pdf
 
mutool.exe draw -s -ft -r 300 -F png -o test/mupdf/page-%d.png pdf\1635.pdf
 
mutool.exe draw -s -ft -r 300 -F svg -o test/mupdf/page-%d.svg pdf\1635.pdf
 
Итого, конвертация poppler в pdf работает очень медленно.
 
Graphicsmagick имеет относительно неплохую скорость рендеринга оцифрованных книг в jpeg, в остальных параметрах проигрывает. Использует Ghostscript для своей работы.
 
Ghostscript быстрее всех конвертирует текстовые книги в jpeg и быстро разбивает pdf на части (pdf to pdf). Делит первое место по скорости рендеринга текстовых книг в png с mupdf.
 
В poppler качество кодирование в jpeg нельзя задать руками, но оно близко к 75%, поэтому и для ghostscript установлено аналогичное качество. В качестве кодировщика используется собственная реализация, за счет чего можно попытаться получить ускорение использованием libjpeg-turbo.
 
Разбиение на pdf в poppler реализовано очень медленным.
 
Mupdf не умеет jpeg.
 
Скорость конвертации в svg очень высокая, также mupdf умеет сохранять в html, text, xml.
 
Mupdf не умеет разбивать файл на отдельные pdf-страницы (т.е. нужная опция не работает).
 
PdfBox и с png и с jpg работает медленно. Причем, с книгой Б рендеринг в PNG очень медленный, а вот в jpeg уже более приемлемый. Дополнительную информацию по скорости рендеринга pdfbox (на этих же книгах но при 75 dpi) можно узнать здесь http://arsen-borovinskiy.blogspot.ru/2016/08/apache-pdfbox.html. Однако на текстовых pdf самая высокая скорость разбиения на страницы. Правда OpenJDK 8 под Linux может использовать библиотеку рендеринга libjpeg-turbo, за счет чего может быть значительное повышение производительности при записи в JPEG.
 

Конвертация всех страниц в один проход под Linux

Под Linux можно использовать системные библиотеки рендеринга PNG и JPEG, за счет чего можно ожидать определенный рост. Спустя год после измерений под Windows были проведены измерения под CentOS6 x64 на аналогичном оборудовании. В целом были получены более высокие результаты. Предположительно, это связано с использованием свежих библиотек рендеринга. Так, например, переход с openjdk 1.7 на openjdk 1.8 может привести к увеличению скорости рендеринга рисунков в полтора-два раза.

Библиотеки poppler 0.52 и ghostscript 9.21 были собраны на этом ПК из исходников, mupdf использовался 1.11 из бинарника, graphicsmagick 1.3 из репозитария.

При этом стоит отметить, что graphicsmagick рендерит PDF двумя этапами: рендеринг с помощью ghostscript в ppm и конвертация в JPEG или PNG средствами graphicsmagick, поэтому graphicsmagick может опередить ghostscript только на этапе кодирования.
 

Результаты измерений представлены в виде двух таблиц для этих же книг с полным временем и временем затраченным на одну страницу.

 Книга А, (все страницы, сек / одна страница, сек) Книга Б, (все страницы, сек / одна страница, сек)
библиотекаpdfjpgpngsvg pdfjpgpngsvg
poppler11,3/0,1242,7/0,451314,0/13,8320,6/0,22 1,7/0,0117,1/0,13209,0/1,633,6/0,03
ghostscipt27,1/0,2996,5/1,02398,0/4,19  19,9/0,1637,1/0,29147,0/1,15 
mupdf22,5/0,24 245,0/2,585,1/0,05 0,4/0,003 54,8/0,431,3/0,01
pdfbox2,0/0,02147,0/1,55287,0/3,02  1,8/0,0169,3/0,54208,0/1,63 
graphicsmagick 88,2/0,93436,0/4,59   100,0/0,7884,4/0,66 

 

Mupdf показывает лучшие результаты при рендеринге  в SVG и PNG. Также он быстрее всех разбивает книгу Б на PDF-страницы. Но не поддерживает JPEG. В целом его можно признать победителем.

Poppler является тоже хорошим выбором. Это единственная программа поддерживающая все форматы, он быстрее всех конвертирует в JPEG, разбиение на PDF и SVG у него второе по-скорости. Слабым место для Poppler является работа с PNG: он крайне медленно работает с книгой А. По сравнению с предыдущими тестами, сильно улучшилось время разбиения PDF на страницы.

Ghostscript является более ранней версией mupdf. Если под Windows он показывал результаты близкие к mupdf, то под Linux заметно отстает.

GraphicsMagick для рендеринга книги Б в формат PNG неожиданно опередил ghostscript. В остальном он медленнее ghostscript. 

PDFBox в прошлом тестировании показывал высокую скорость разбиения на страницы, а по остальным показателем у него был наихудший результат. Под Linux результат принципиально не изменился, но скорость у PDFBox добавилась (версия 2.0.5).

Выводы

Для оцифрованных книг лучше использовать poppler с форматом JPEG и готовить страницы книг в PDF с помощью Ghostscript под Windows и PDFBox/Poppler под Linux.
 
Для текстовых книг лучше использовать mupdf с форматом PNG и разбивать книгу с помощью PDFBox под Windows и mupdf под Linux.

Дополнительно можете посмотреть другой бенчмарк сравнения Poppler, pdfium, mpdf: https://github.com/nathanstitt/dc-pdf-raster-test