123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- #!/bin/sh
- usage () {
- cat <<EOF>&2
- Usage: ${0##*/} COMMAND [-i] [-o OUTPUT] [OPTIONS] FILES...
- Wrapper around various PDF operations.
- OUTPUT is ignored when processing in-place (-i) or when more than one input
- files is given.
- Otherwise, or if OUTPUT is unspecified, a file with a random suffix is produced.
- List of commands and their options:
- compress [OPTIONS]
- Compress PDFs.
- -c: Compress raster graphics at the expense of a quality loss.
- -n: Do not compress raster graphics at all. Output may be bigger.
- extract [-f FIRST-PAGE] [-l LAST-PAGE]
- Extract a range of pages to a single PDF.
- resize
- Resize to A4.
- size
- Same as pdfinfo, but append size in milimeters.
- xerox
- Convert a PDF to a blurred, black & white raster image.
- For more details on compression:
- $ gs -sDEVICE=pdfwrite -o /dev/null \\
- -c "currentpagedevice { exch ==only ( ) print == } forall"
- http://partners.adobe.com/public/developer/en/acrobat/sdk/pdf/pdf_creation_apis_and_specs/DistillerParameters.pdf
- EOF
- }
- [ $# -eq 0 ] && usage && exit
- cmd="$1"
- shift 1
- NO_OUTPUT=false
- INPLACE=false
- COMPRESS_OPT="-dColorConversionStrategy=/LeaveColorUnchanged -dDownsampleMonoImages=false -dDownsampleGrayImages=false -dDownsampleColorImages=false -dAutoFilterColorImages=false -dAutoFilterGrayImages=false -dColorImageFilter=/FlateEncode -dGrayImageFilter=/FlateEncode"
- EXTRACT_FIRST=1
- EXTRACT_LAST=1
- case $cmd in
- compress)
- while getopts ":cino:" opt; do
- case $opt in
- c)
- COMPRESS_OPT="" ;;
- i)
- INPLACE=true ;;
- n)
- COMPRESS_OPT="-dColorConversionStrategy=/LeaveColorUnchanged -dEncodeColorImages=false -dEncodeGrayImages=false -dEncodeMonoImages=false" ;;
- o)
- output="$OPTARG" ;;
- \?)
- usage
- exit 1 ;;
- esac
- done
- ;;
- extract)
- while getopts ":f:il:o:" opt; do
- case $opt in
- f)
- EXTRACT_FIRST="$OPTARG" ;;
- i)
- INPLACE=true ;;
- l)
- EXTRACT_LAST="$OPTARG" ;;
- o)
- output="$OPTARG" ;;
- \?)
- usage
- exit 1 ;;
- esac
- done
- ;;
- resize|xerox)
- while getopts ":io:" opt; do
- case $opt in
- i)
- INPLACE=true ;;
- o)
- output="$OPTARG" ;;
- \?)
- usage
- exit 1 ;;
- esac
- done
- ;;
- size)
- NO_OUTPUT=true ;;
- *)
- usage
- exit 1 ;;
- esac
- shift $((OPTIND - 1))
- if [ $# -eq 0 ]; then
- usage
- exit 1
- fi
- [ $# -gt 1 ] && unset output
- mkoutput () {
- if [ -z "$output" ] || [ -e "$output" ]; then
- case "$input" in
- */*) ;;
- *) input="./$input" ;;
- esac
- dirname="${input%/*}"
- basename="${input##*/}"
- output=$(mktemp "$dirname/${basename%.*}-$cmd"-XXXXXX.pdf)
- fi
- echo "$output"
- }
- ## Some JPEG options
- # -sDEVICE=jpeg
- # -dUseCIEColor
- # -dJPEGQ=100
- # -r300
- # -dTextAlphaBits=4
- # -dGraphicsAlphaBits=4
- # -dMaxStripSize=8192
- compress () {
- gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite $COMPRESS_OPT -sOutputFile="$output" "$input"
- }
- extract () {
- gs -sDEVICE=pdfwrite -dNOPAUSE -dSAFER -dBATCH -dFirstPage="$EXTRACT_FIRST" -dLastPage="$EXTRACT_LAST" -sOutputFile="$output" "$input"
- }
- resize () {
- gs -q -o "$output" -sDEVICE=pdfwrite -sPAPERSIZE=a4 -dFIXEDMEDIA -dPDFFitPage -dCompatibilityLevel=1.4 "$input"
- }
- size () {
- pdfinfo "$input" | awk '/^Page size:/ {printf $0; print ", " $3*0.35278 " x " $5*0.35278 " mm"; next } 1'
- }
- xerox () {
- convert -threshold 90% -blur 1x1 -quality 100 -flatten -density 400 "$input" "$output"
- }
- for input; do
- echo "==> '$input'"
- $NO_OUTPUT || output=$(mkoutput)
- $cmd
- if $INPLACE; then
- rm -f "$input"
- mv "$output" "$input"
- fi
- echo
- done
|