Как изменить размер содержимого PDF без изменения размера страницы?

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

Есть ли средство командной строки linux (или средство пакетной обработки) для изменения размера содержимого каждой страницы до, например, 95% от исходного размера при сохранении размеров страницы?

Изменить: мне нужно больше места на всех четырех сторонах.

Просмотрите этот пост в блоге с 2008 года, в котором показано, как вы можете это сделать с помощью ghostscript, и этот скриптовый скрипт pdfScale, который прекрасно обертывает его для вас.

Блог дает этот пример для 90% шкалы на бумаге формата А4:

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER \ -dCompatibilityLevel="1.3" -dPDFSETTINGS="/printer" \ -dSubsetFonts=true -dEmbedAllFonts=true \ -sPAPERSIZE=a4 -sOutputFile="out.pdf" \ -c "<</BeginPage{0.9 0.9 scale 29.75 42.1 translate}>> setpagedevice" \ -f in.pdf 

и сценарий уменьшает это до

 pdfScale -s 0.9 in.pdf out.pdf 

а также автоматически определяет размер медиа-страницы. Другие тяжеловесные инструменты включают pdfjam и pdfedit .


gs может выйти из строя с ошибкой Set UseCIEColor, о которой сообщается в этом и этом сообщении об ошибке, можно -dPDFSETTINGS="/printer" заменив -dPDFSETTINGS="/printer" на -dPDFSETTINGS="/screen" .


Скрипт pdfScale извлекает текущий размер носителя из входного файла, и это может завершиться неудачно, если формат PDF оптимизирован или имеет несколько определений носителей. Возможно, вам придется отредактировать скрипт, чтобы заменить номер строки 111:

  local mediaBox="$(cat "$INFILEPDF" | grep -a '/MediaBox')" # done with externals 

следующими двумя строками

 local mediaBox="$(cat "$INFILEPDF" | grep -m 1 -a '/MediaBox')" # done with externals mediaBox="${mediaBox#*/MediaBox}" # strip start of line upto /MediaBox