Используя ImageMagick или Ghostscript (или что-то еще), чтобы масштабировать PDF, чтобы соответствовать странице? - PullRequest
13 голосов
/ 13 февраля 2009

Я бился головой об этом безрезультатно.

Мне нужно сжать несколько больших PDF-файлов для печати на странице размером 8,5х11 дюймов (стандартная буква). Может ли ImageMagick / Ghostscript справиться с подобными вещами, или у меня так много проблем, потому что я использую не тот инструмент для работы?

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

Ответы [ 4 ]

17 голосов
/ 09 августа 2010

Я бы не использовал convert. Он использует Ghostscript в фоновом режиме, но гораздо медленнее. Я бы использовал Ghostscript напрямую, так как он дает мне гораздо больше прямого контроля (а также некоторый контроль над настройками, которые намного сложнее достичь с convert). И для преобразования в работу для преобразования PDF в PDF Ghostscript все равно будет установлен:

  gs \
    -o /path/to/resized.pdf \
    -sDEVICE=pdfwrite \
    -dPDFFitPage \
    -r300x300 \
    -g2550x3300 \
    /path/to/original.pdf
8 голосов
/ 13 февраля 2009

Команды ImageMagick mogrify / convert действительно сделают эту работу. У Стивена Пейджа была почти правильная идея, но вам также нужно установить dpi файла, иначе вы не сможете выполнить работу.

Если у вас есть файл с разрешением 300 точек на дюйм и соотношением сторон, равным 8,5 x 11, команда будет выглядеть так:

// 300dpi x 8.5 -2550, 300dpi x 11 -3300
convert original.pdf -density "300" -resize "2550x3300" resized.pdf

Если соотношение сторон другое, вам нужно сделать немного более сложную обрезку.

7 голосов
/ 16 февраля 2009

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

Мультивалентный сохранит векторную информацию PDF. Попробуйте:

java -cp Multivalent.jar tool.pdf.Impose -dim 1x1 -paper "8.5x11in" myFile.pdf

для создания выходного файла myFile-up.pdf

6 голосов
/ 17 апреля 2011

Подход Ghostscript хорошо сработал для меня. (Я переместил свой файл со своего ПК с Windows на компьютер с Linux и запустил его там.) Я внес одно небольшое изменение в команду Ghostscript, поскольку приведенная выше команда изменения размера Ghostscript полностью заполняет страницу размером 8,5 на 11 дюймов. Мой принтер не может печатать по краям, поэтому несколько миллиметров вдоль каждого края страницы были потеряны. Чтобы преодолеть эту проблему, я масштабировал свой PDF-документ до 0,92 из полных 8,5 на 11 дюймов. Таким образом, я увидел все по центру страницы и имел небольшой запас. Поскольку 0,92 * (2550x3300) = (2346x3036), я выполнил следующую команду Ghostscript:

  gs -sDEVICE=pdfwrite \
     -dPDFFitPage \
     -r300x300 \
     -g2346x3036 \
     /home/user/path/original.pdf \
     -o /home/user/path/resized.pdf
...