Назад | Перейти на главную страницу

Требуется быстрое преобразование PDF в JPG в Linux

В настоящее время я использую ImageMagick для преобразования PDF-файлов в растровые изображения JPEG. Это мучительно медленно и занимает много памяти.

Я использовал следующую команду:

convert -geometry 1024x768 -density 200 -colorspace RGB foo.pdf bar%02d.jpg

Я предполагаю, что он медленный, потому что использует Ghostscript. Но должен быть более быстрый способ сделать это на Linux.

Кто-нибудь нашел лучшее решение?

Использование Ghostscript напрямую (вместо использования ImageMagick's convert команда, которая косвенно вызывает Ghostscript) действительно быстрее. И это дает вам больше контроля над параметрами преобразования. Пытаться

gs \
   -sDEVICE=jpeg   \
   -o bar_%03d.jpg \
   -dJPEGQ=95      \
   -r600x600       \
   -g4960x7016     \
   foo.pdf

где

  • -o: определяет выходной путь + имя файла (и сохраняет использование -dBATCH -dNOPAUSE)
  • -dJPEGQ: устанавливает качество JPEG на 95%
  • -r: устанавливает разрешение 600 точек на дюйм
  • -g: устанавливает размер изображения 4960x7016 пикселей
  • -sDEVICE: устанавливает вывод в формате JPEG

Эта команда, вероятно, по-прежнему будет для вас медленной и создавать файлы большего размера, чем ожидалось. Для файлов меньшего размера и более быстрого выполнения попробуйте это (что, вероятно, близко к качеству вывода вашего convert командная строка):

gs \
   -sDEVICE=jpeg   \
   -o bar_%03d_200dpi_q80.jpg \
   -dJPEGQ=80      \
   -r200x200       \
   -g1653x2339     \
   foo.pdf

или даже

gs \
   -sDEVICE=jpeg   \
   -o bar_%03d_default_a4.jpg \
   -sPAPERSIZE=a4 \
   foo.pdf

(что дает разрешение 72 точки на дюйм, что часто достаточно для большинства экранов и большинства веб-приложений).

Кстати, одна из причин, по которой ImageMagick работает намного медленнее, заключается в том, что он дважды вызывает Ghostscript. Он не конвертирует PDF => PNG за один раз, а использует 2 разных шага:

  • он сначала использует Ghostscript для PDF => PostScript конверсия;
  • затем он использует Ghostscript для PostScript => PNG конверсия.

Вы можете узнать о подробных настройках «делегатов» ImageMagick (внешних программ, используемых ImageMagick, таких как Ghostscript), набрав

convert -list delegate

(В моей системе это список из 32 различных команд.) Теперь, чтобы увидеть, какие команды используются для преобразования в PNG, используйте это:

convert -list delegate | grep -i png

Хорошо, это было для Linux. Если вы работаете в Windows, попробуйте следующее:

convert -list delegate | findstr /i png

Вы обнаружите, что IM создает PNG только из входных файлов PS или EPS. Так как же IM получить (E) PS из вашего PDF-файла? Легко:

convert -list delegate | findstr /i PDF
convert -list delegate | grep -i PDF

Ах! Он использует Ghostscript для преобразования PDF => PS, а затем снова использует Ghostscript для преобразования PS => PNG. Работает, но не самый эффективный способ если вы знаете, что Ghostscript может делать PDF => PNG в один идти. И быстрее. И в гораздо лучшем качестве.

Что касается обработки IM преобразованием PDF в изображения с помощью делегата Ghostscript, вы должны знать прежде всего две вещи:

  1. По умолчанию, если вы не укажете дополнительный параметр, Ghostscript будет выводить изображения с разрешением 72 точки на дюйм. Поэтому иногда здесь предлагают добавить -density 600 как convert параметр, который указывает Ghostscript использовать разрешение 600 dpi для вывода изображения.
  2. Обход IM для двойного вызова Ghostscript для преобразования в первую очередь PDF => PS а потом PS => PNG это настоящая ошибка. Потому что ты никогда win и harldy сохраняют качество на первом этапе, но очень часто кое-что теряют. Причины:
    • PDF может работать с прозрачными пленками, в отличие от PostScript.
    • PDF может встраивать шрифты TrueType, чего не может PostScript. и т. д. с.
      (Конверсия в обратном направлении, PS => PDF, поэтому не так критично ....)

Вот почему я предложил вам конвертировать ваши PDF-файлы в PNG (или JPEG) напрямую с помощью Ghostscript. И используйте самая последняя версия 8.71 (скоро будет выпущено: 9.00) Ghostscript ...

Программа pdftoppm из пакета poppler также может создавать файлы JPEG, и для меня это примерно в два раза быстрее, чем использование gs как описано выше:

pdftoppm -jpeg -r 300 foo.pdf foo.jpg

По моему опыту, MuPDF намного быстрее, чем Ghostscript. Это гораздо более новый проект, в котором нет особых проблем с GS. Попробуйте, подходит ли он для вашего использования!

mudraw -w 1024 -h 768 -r 200 -c rgb -o bar%d.png foo.pdf

Если у вас более старый дистрибутив Linux и установлены mupdf-tools из репозитория, mudraw все еще можно назвать pdfdraw

Затем вам нужно преобразовать png в jpeg, используя, например, imagemagick. Но все равно будет быстрее, чем Ghostscript.