Разные программы рендеринга имеют разную скорость рендеринга в различные форматы. Скорость зависит от разных параметров и цель настоящей статьи - дать ориентиры в каком случае какой рендерер будет быстрее.
При рендеринге PDF производится растеризация векторных шрифтов для текстовых PDF и декодирование рисунков с изменением размера для оцифрованных книг. На следующем этапе происходит кодирование растеризованной страницы в один из форматов. С точки зрения нагрузки на процессор, растеризация шрифтов и декодирование рисунков имеют разную процессорную сложность. Поэтому тестирование надо проводить как для текстовых PDF, так и для оцифрованных книг в раздельности. При этом важно понимать, что чем больше разрешение вставленного в PDF оцифрованного рисунка, тем медленнее будет процесс его декодирования.
Тестируемые книги:
Книга А, 95 стр. 150МБ, оцифрованные копии "Крестьянское движение в Шадринском уезде".
Книга Б, 128 стр. 1МБ, текст с таблицами "Физическая культура в процессе формирования компетенции саморазвития личности студента вуза" ч.3, Игошев, Оплетин.
Конвертация всех страниц в один проход под Windows
В тесте происходит конвертация всех страниц последовательно из исходного PDF в различные выходные форматы при плотности пикселей 300DPI.
Представлено общее время конвертации и среднее время на одну страницу.
формат | конвертация | А (на страницу) | Б (НА СТРАНИЦУ) | А (всех) | Б (всех) |
---|---|---|---|---|---|
pdf to jpeg | poppler | 0.95 | 0.51 | 90 | 65 |
ghsotscript | 1.63 | 0.45 | 155 | 58 | |
graphicsmagick | 1.36 | 1.23 | 129 | 158 | |
pdfbox | 3.18 | 0.98 (with errors) | 302 | 124 | |
pdf to png | mupdf | 4.40 | 0.92 | 418 | 87 |
ghostscript | 5.94 | 0.91 | 564 | 116 | |
graphicsmagick | 7.26 | 1.50 | 690 | 192 | |
poppler | 22.1 | 2.98 | 2095 | 370 | |
pdfbox | 6.92 | 4.48 | 657 | 573 | |
pdf to pdf (split) | pdfbox | 1.87 | 0.02 | 178 | 3 |
ghostscript | 0.44 | 0.26 | 42 | 33 | |
poppler | 10.2 | 1.24 | 964 | 118 | |
pdf to svg | mupdf | 0.13 | crush | 12 | crush |
poppler | 0.46 | 0.04 | 44 | 5.11 |
gm.exe convert -density 300x300 -quality 75 +adjoin pdf\1635.pdf test\graphicsmagick/page-%d.jpggswin64c.exe -sDEVICE=jpeg -q -dNOPAUSE -dBATCH -dPDFSETTINGS=/ebook -sOutputFile=test\ghostscript/page-%d.jpg -r300x300 -dJPEGQ=75 pdf\1635.pdfgswin64c.exe -sDEVICE=pdfwrite -q -dNOPAUSE -dBATCH -dPDFSETTINGS=/ebook -sOutputFile=test\ghostscript/page-%d.pdf -r300x300 -dJPEGQ=75 pdf\1635.pdfpdftocairo.exe -jpeg -r 300.0 pdf\1635.pdf test\poppler/pagepdfseparate.exe pdf\1635.pdf test\poppler/page-%d.pdfmutool.exe draw -s -ft -r 300 -F png -o test/mupdf/page-%d.png pdf\1635.pdfmutool.exe draw -s -ft -r 300 -F svg -o test/mupdf/page-%d.svg pdf\1635.pdf
Конвертация всех страниц в один проход под 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 только на этапе кодирования.
Результаты измерений представлены в виде двух таблиц для этих же книг с полным временем и временем затраченным на одну страницу.
Книга А, (все страницы, сек / одна страница, сек) | Книга Б, (все страницы, сек / одна страница, сек) | ||||||||
библиотека | jpg | png | svg | jpg | png | svg | |||
poppler | 11,3/0,12 | 42,7/0,45 | 1314,0/13,83 | 20,6/0,22 | 1,7/0,01 | 17,1/0,13 | 209,0/1,63 | 3,6/0,03 | |
ghostscipt | 27,1/0,29 | 96,5/1,02 | 398,0/4,19 | 19,9/0,16 | 37,1/0,29 | 147,0/1,15 | |||
mupdf | 22,5/0,24 | 245,0/2,58 | 5,1/0,05 | 0,4/0,003 | 54,8/0,43 | 1,3/0,01 | |||
pdfbox | 2,0/0,02 | 147,0/1,55 | 287,0/3,02 | 1,8/0,01 | 69,3/0,54 | 208,0/1,63 | |||
graphicsmagick | 88,2/0,93 | 436,0/4,59 | 100,0/0,78 | 84,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, pdfium, mpdf: https://github.com/nathanstitt/dc-pdf-raster-test