Масштабирование PDF-документа

Создан: 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