PDF to image

scorpion-ds

Новичок
Добрый день!

Требуется качественно и быстро преобразовать PDF в картинки.

На данный момент, используется утилита:
http://www.foolabs.com/xpdf/download.html

Она в целом нормальная, но не позволяет получить размеры которые требуется, в качестве параметров качества, можно указать dpi, но это не дает определенного размера на выходе. Некоторые режутся приемлемо, а вот некоторые получаются 16000x* (при этом PDF вроде обычная, но сделанная из PSD) и это делается очень долго.

Другим вариантом, является Imagick, он работает несколько дольше, но позволяет кроме качества задать еще и размер необходимого изображения.

Кроме того, независимо от выбранной библиотеки, довольно часто возникает проблема с картинками в PDF, обычно они нормально отображаются, но другие получаются очень плохого качества (обычно это скриншоты), причем это качество зависит от dpi которое было задано в настройках. То есть получается, что бы нормально обработать вставленные картинки, приходится повышать качество и следовательно скорость обработки снижается.

Я тестирую производительность в отношении сервиса docsend и аттач, понятно, что все еще зависит от сервера, но сейчас скорость местами отличается в разы.

Есть ли еще варианты, для конвертации PDF в картинки?
 

AnrDaemon

Продвинутый новичок
Я тестирую производительность в отношении сервиса docsend
Ну смешно же. Тестировать локальные решения в сравнении с каким-то сторонним сервисом.

Imagick из "коробочных" единственный универсальный вариант с приемлемыми настройками.
 

AnrDaemon

Продвинутый новичок
Не верю я этим "форкам с улучшениями"… Особенно когда форкают изначально OSS проект.
 

AnrDaemon

Продвинутый новичок
Оракл, Оракл, никто не пользуется, аналогично, не уверен.
 

scorpion-ds

Новичок
Ясно, судя по всему ничего лучше нет, сейчас с Imagick проблема, что он рассматривает PDF в физических размерах, ему загружаешь файл размером 1,5 реальных метров и на выходе получаем 16000*x PX (при 300 DPI, меньше качество становится плохим), можно конечно еще сделать ресайз и тогда возрастает время обработки.
 

AnrDaemon

Продвинутый новичок
Нет, ну а как ты хотел?…
Растеризация вектора по определению ухудшает качество.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
низкая скорость обработки - разрежь pdf на страницы и распараллель по кластеру
в чем конкретно проблема-то?
 

scorpion-ds

Новичок
низкая скорость обработки - разрежь pdf на страницы и распараллель по кластеру
До недавнего времени там еще был 4 размера картинок, потому я распараллеливал по размерам, теперь оставили два размера, так что именно так я и планирую делать.

Проблема в том, что не устраивает скорость работы, файл в 215 страниц может обрабатываться к примеру 2 минуты, это нормально, но если загрузить PPTX (обычно это изначальный формат, только потом преобразуется в PDF, а из него в картинки) в 16 страниц, то может уйти порядка 4-8 минут, если файл с обилием картинок. Если одновременно будет работать несколько пользователей, то время будет еще увеличиваться.

Сейчас у нас на тариф vServer CX50, там 4 ядра выше их распараллелить не выйдет.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
есть такая штука - вычислительная сложность
с ростом количества пикселей по ширине и высоте количество требуемой памяти и тактов процессора для обработки увеличивается в квадрате

надо обрабатывать - добавляйте сервера и пишите распараллеливание между серверами,
и да - нанимайте команду, которая будет проектировать и писать распараллеливание
 

scorpion-ds

Новичок
Насчет размеров все понятно и очевидно, но мне непонятно другое.

Есть тестовый файл, у которого реальные размеры порядка 1,5 метров, если его загружать при стандартном 300 DPI (у меня такой стандарт, на данный момент), то он грузится очень долго, если его загрузить с 72 DPI, то он выглядит все равно отлично, а вот остальные которым требовалось порядка 300 DPI, открываются с очень плохим качеством.

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

AnrDaemon

Продвинутый новичок
Ещё раз - ЧТО ИМЕННО находится в твоём файле? Картинка, текст? Текст даже шестым кеглем будет приемлемо смотреться и на 72 DPI. А вот картинка вся умрёт.
 

scorpion-ds

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

Тем не менее, судя по экспериментам, важно при каких физических размерах он был сохранен, в 95% случаях любой загруженный файл нормально обрабатывается, но вот некоторые которые имеют большой физический размер (под печать), проблемы.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
@scorpion-ds, ты пишешь бред.
вопрос был: Ещё раз - ЧТО ИМЕННО находится в твоём файле? Картинка, текст?
твой ответ: Что угодно может находиться, с картинками проблема

так все-таки - что угодно, или картинка?
ЧТО ИМЕННО находится в твоём файле, с которым проблемы? Картинка, текст?

Если картинки - так и должно быть.
 

AnrDaemon

Продвинутый новичок
вот как раз с картинками встроенными проблема
Тебе об этом с начала топика говорят. Тут нет "серебряной пули".
Если хочешь хорошие результаты, надо делать хорошо. Читать формат, смотреть, что внутри, подбирать режим. И, да, это будет небыстро.
 

scorpion-ds

Новичок
Извиняюсь, если пишу непонятно ...

В PDF файле находится и текст и картинки, текст обычно нормально конвертируется, а вот с картинками беда.

Обнаружил как получить свойства (если файл открыть с 2 DPI, то можно узнать информацию о нем и при этом это произойдет достаточно быстро, для обработки открываю его уже с нужным DPI), пока смог узнать такое:
Код:
bash-4.2$ php bin/console test:convert presentation.pdf
/var/www/***/web/presentations/presentation.pdf
Page count: 16
Array
(
    [date:create] => 2016-10-17T16:37:18+02:00
    [date:modify] => 2016-10-17T16:37:18+02:00
    [pdf:HiResBoundingBox] => 720x540+0+0
    [pdf:Version] => PDF-1.4
)
bash-4.2$ php bin/console test:convert manual.pdf
/var/www/***/web/presentations/manual.pdf
Page count: 14
Array
(
    [date:create] => 2016-10-17T16:37:37+02:00
    [date:modify] => 2016-10-17T16:37:37+02:00
    [pdf:HiResBoundingBox] => 3000x1688+0+0
    [pdf:Version] => PDF-1.5
)
bash-4.2$ php bin/console test:convert nokian.pdf
/var/www/***/web/presentations/nokian.pdf
Page count: 13
Array
(
    [date:create] => 2016-10-17T16:37:55+02:00
    [date:modify] => 2016-10-17T16:37:55+02:00
    [pdf:HiResBoundingBox] => 595.276x841.89+0+0
    [pdf:Version] => PDF-1.4
)
проблемный второй, думаю зная эти данные, можно подобрать оптимальное значение DPI при открытии файла.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
вторая картинка в 13 раз больше по количеству пикселей
 
Сверху