| @@ -0,0 +1,42 @@ | |||||
| #!/bin/bash | |||||
| # pdfScale.sh | |||||
| # | |||||
| # Scale PDF to specified percentage of original size. | |||||
| # Ref: http://ma.juii.net/blog/scale-page-content-of-pdf-files. | |||||
| SCALE=0.95 # scaling factor (0.95 = 95%, e.g.) | |||||
| # Validate args. | |||||
| [ $# -eq 1 ] || { echo "***ERROR: Usage pdfScale.sh <inFile>.pdf"; exit 99; } | |||||
| INFILEPDF="$1" | |||||
| [[ "$INFILEPDF" =~ ^..*\.pdf$ ]] || { echo "***ERROR: Usage pdfScale.sh <inFile>.pdf"; exit 99; } | |||||
| OUTFILEPDF=$(echo "$INFILEPDF" | sed -e s/\.pdf$// -).SCALED.pdf | |||||
| # Dependencies | |||||
| command -v identify >/dev/null 2>&1 || { echo >&2 "Please install 'imagemagick' (sudo apt-get install imagemagick). Aborting."; exit 1; } | |||||
| command -v gs >/dev/null 2>&1 || { echo >&2 "Please install 'ghostscript' (sudo apt-get install ghostscript ?). Aborting."; exit 1; } | |||||
| command -v bc >/dev/null 2>&1 || { echo >&2 "Please install 'bc' arbitrary precision calculator language. Aborting."; exit 1; } | |||||
| # Get width/height in postscript points (1/72-inch), via ImageMagick identify command. | |||||
| # (Alternatively, could use Poppler pdfinfo command; or grep/sed the PDF by hand.) | |||||
| IDENTIFY=($(identify $INFILEPDF 2>/dev/null)) # bash array | |||||
| [ $? -ne 0 ] &GEOMETRY=($(echo ${IDENTIFY[2]} | tr "x" " ")) # bash array — $IDENTIFY[2] is of the form PGWIDTHxPGHEIGHT | |||||
| PGWIDTH=${GEOMETRY[0]}; PGHEIGHT=${GEOMETRY[1]} | |||||
| # Compute translation factors (to center page. | |||||
| XTRANS=$(echo "scale=6; 0.5*(1.0-$SCALE)/$SCALE*$PGWIDTH" | bc) | |||||
| YTRANS=$(echo "scale=6; 0.5*(1.0-$SCALE)/$SCALE*$PGHEIGHT" | bc) | |||||
| echo $PGWIDTH , $PGHEIGHT , $OUTFILEPDF , $SCALE , $XTRANS , $YTRANS , $INFILEPDF , $OUTFILEPDF | |||||
| # Do it. | |||||
| gs \ | |||||
| -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER \ | |||||
| -dCompatibilityLevel="1.5" -dPDFSETTINGS="/printer" \ | |||||
| -dColorConversionStrategy=/LeaveColorUnchanged \ | |||||
| -dSubsetFonts=true -dEmbedAllFonts=true \ | |||||
| -dDEVICEWIDTH=$PGWIDTH -dDEVICEHEIGHT=$PGHEIGHT \ | |||||
| -sOutputFile="$OUTFILEPDF" \ | |||||
| -c "<</BeginPage{$SCALE $SCALE scale $XTRANS $YTRANS translate}>> setpagedevice" \ | |||||
| -f "$INFILEPDF" | |||||