Использование ImageMagick или Ghostscript (или чего-то еще) для масштабирования PDF по размеру страницы?
-
23-08-2019 - |
Вопрос
Я бился об это головой, но безрезультатно.
Мне нужно сжать несколько больших 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