Создан: 02.12.2010
Иванов Аркадий
Пришёл ко мне по почте важный счёт в виде PDF, но левая граница была прижата к краю и принтера обрезали слева несколько символов.
Покопался в Сети и нашёл очень простое решение в виде скрипта, который масштабирует документ при помощи LateX. Конечно, LaTeX должен быть установлен.
Запускается масштабирование на 80% файла test.pdf так:
./pdfrescale.sh test.pdf 0.8
Вот скрипт:
#!/bin/sh
# Based on a batch file by Maverick Woo
#
# Usage:
pdfrescale path-stem scale-factor
#
# Example:
# pdfrescale sillyLNCSpaper 1.2
# produces
# sillyLNCSpaper-1.2.pdf
jobname=$1
if [ ! -f $jobname.pdf ]; then
echo "Input file $jobname.pdf not found"
exit 1
fi
scale=$2
if [ "$scale" == "" ]; then
echo scale not specified, using default: 1.2
scale=1.2
fi
tmp=`tempfile|sed -e 's/\./_/g'`.pdf
cp $1.pdf $tmp
pdflatex \
-jobname="$jobname-$scale" \
'\documentclass[twoside]{article}\usepackage{pdfpages}\begin{document}\includepdf[pages=-,scale='"$scale"']{'"$tmp"'}\end{document}\batchmode' \
> /dev/null
\rm $tmp
\rm $jobname-$scale.aux $jobname-$scale.log
=======================================================================================
Дополнительный вариант, взятый с http://stackoverflow.com/questions/18343813/scale-pdf-to-add-border-for-printing-full-size-pages
#! /bin/bash
PERCENT=10
# assume 0<=$PERCENT<=100 (no error checks!)
xx="595" #width of A4 in post script points
yy="842" #height of A4 in pps
ss=$(echo "scale=4; $PERCENT / 2" | bc)
sx=$(echo "scale=4; ${xx}"'*'"( ${ss}/ 100 )" | bc)
sy=$(echo "scale=4; ${yy}"'*'"( ${ss}/ 100 )" | bc)
s=$(echo "scale=4; 1 - $PERCENT / 100" | bc)
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER \
-dCompatibilityLevel="1.3" -dPDFSETTINGS="/printer" \
-dSubsetFonts=true -dEmbedAllFonts=true \
-sPAPERSIZE=a4 -sOutputFile="1A.pdf" \
-c "<</BeginPage{${s} ${s} scale ${sx} ${sy} translate}>> setpagedevice" \
-f 1.pdf