Home > Linux, программирование > Конвертация PDF в JPEG

Конвертация PDF в JPEG

На новой работе поставили задание сделать проссмотрт PDF-версии газеты. Ну как-бутто читалку PDF. Ну мы то знаем, что никаким PDF в браузере и не должно пахнуть, а всё выводить будем в JPEG. Тоесть задача разбивается на 2:

  • конвертировать PDF в JPEG
  • выводить картинки, как бутто мы Acrobat Reader  написали

Если с выводом почти всё ясно ( берём листалку какой-то галереи и вперёт на конях за махновцами), то как конвертировать на сервере да ещё в консоли Linux! А в том, что и прелесть Линукса, что всё в консоли.

Итак, сформируем подзадачу: надо каждую страничку PDF-файла превратить в удобочитаемый и сносный JPEG-файл. Поборол зверя я! Вот хронология событий.

ImageMagic

Сначала я пробывал конвертировать файл с помощью ImageMagic. Он хорошо это  умеет, но местами, не пойму почему, в результате получается совсем не читаемый JPEG. Команда такова:

convert file.pdf -resize 1024 file.jpeg

В результате получим файлы на каждую страничку, да ещё и с шириной 1024.

Но, как я уже говорил, качество капец страдает, и некоторые странички совсем не читаемые. Я игрался и с качеством и разрешением – ничего, всё глухо.

PDFTOPPM

А потом я открыл для себя pdftoppm и ppmtojpeg! Вот, именно то, что конвертирует всё красиво и хорошо!

Механизм работы таков:

  1. конвертируем PDF в PPM:
    pdftoppm file.pdf file.ppm

    и получаем набор файлов .ppm

  2. каждый .ppm файл конвертируем в jpeg
    ppmtojpeg file.ppm > file.jpeg
  3. ну и если хочется уменшить файлы. то тут уже надо ImageMagic
    convert file.jpeg -resize 1024 file.jpeg

Если много страниц в PDF-файле, то придётся каждый .ppm конвертировать.

Заскриптуем всё это!

Так как всё это надо делать автоматически, то написал маленький скрипт, который находит все .pdf, конвертирует и разбрасывает по разным папкам. Чтобы всё заработало, надо создать директории:

  • big – для картинок с размером 1024
  • org – для оригинальных картинок
  • tmp – временный каталог для .ppm
  • trumb – для превьюшек

В директорию положить файлы PDF и скрипт ниже написаный:


#!/bin/bash
for g in `find . -name "*.pdf"`;
do
  echo "Processing $g"
  pdftoppm $g tmp/$g
  #convert $g -density 4096 -resize 1200 -quality 100 big/$g.jpeg
  for n in `find tmp/ -name "*.ppm"`;
  do
    tr=`echo $n | awk -F / '{ print $2 }'`
    echo "  Processing $tr"
    ppmtojpeg $n > org/$tr.jpeg
    convert org/$tr.jpeg -resize 1024 big/$tr.jpeg
    convert big/$tr.jpeg -resize 75 trumb/$tr.jpeg
    rm $n
  done
done
  1. No comments yet.
  1. No trackbacks yet.