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

StackOverflow https://stackoverflow.com/questions/547326

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

  gs \
    -o /path/to/resized.pdf \
    -sDEVICE=pdfwrite \
    -dPDFFitPage \
    -r300x300 \
    -g2550x3300 \
    /path/to/original.pdf

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

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

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

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

Подход 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top