| @@ -24,7 +24,7 @@ | |||||
| ################################################### | ################################################### | ||||
| VERSION="1.4.3" | |||||
| VERSION="1.4.5" | |||||
| SCALE="0.95" # scaling factor (0.95 = 95%, e.g.) | SCALE="0.95" # scaling factor (0.95 = 95%, e.g.) | ||||
| VERBOSE=0 # verbosity Level | VERBOSE=0 # verbosity Level | ||||
| BASENAME="$(basename $0)" # simplified name of this script | BASENAME="$(basename $0)" # simplified name of this script | ||||
| @@ -87,6 +87,7 @@ Parameters: | |||||
| Eg. -s 0.8 for 80% of the original size | Eg. -s 0.8 for 80% of the original size | ||||
| Modes: | Modes: | ||||
| a, adaptive Default mode, tries all the methods below | |||||
| c, cat+grep Forces the use of the cat + grep method | c, cat+grep Forces the use of the cat + grep method | ||||
| m, mdls Forces the use of MacOS Quartz mdls | m, mdls Forces the use of MacOS Quartz mdls | ||||
| p, pdfinfo Forces the use of Linux PdfInfo | p, pdfinfo Forces the use of Linux PdfInfo | ||||
| @@ -161,66 +162,70 @@ parseScale() { | |||||
| # Parse a forced mode of operation | # Parse a forced mode of operation | ||||
| parseMode() { | parseMode() { | ||||
| if [[ -z $1 ]]; then | |||||
| echo "Mode is empty, please specify the desired mode" | |||||
| echo "Falling back to adaptive mode!" | |||||
| ADAPTIVEMODE=$TRUE | |||||
| MODE="" | |||||
| return $FALSE | |||||
| fi | |||||
| if [[ $1 = 'c' || $1 = 'catgrep' || $1 = 'cat+grep' || $1 = 'CatGrep' || $1 = 'C' ]]; then | |||||
| ADAPTIVEMODE=$FALSE | |||||
| MODE="CATGREP" | |||||
| return $TRUE | |||||
| elif [[ $1 = 'i' || $1 = 'imagemagick' || $1 = 'identify' || $1 = 'ImageMagick' || $1 = 'Identify' || $1 = 'I' ]]; then | |||||
| ADAPTIVEMODE=$FALSE | |||||
| MODE="IDENTIFY" | |||||
| return $TRUE | |||||
| elif [[ $1 = 'm' || $1 = 'mdls' || $1 = 'MDLS' || $1 = 'quartz' || $1 = 'mac' || $1 = 'M' ]]; then | |||||
| ADAPTIVEMODE=$FALSE | |||||
| MODE="MDLS" | |||||
| return $TRUE | |||||
| elif [[ $1 = 'p' || $1 = 'pdfinfo' || $1 = 'PDFINFO' || $1 = 'PdfInfo' || $1 = 'P' ]]; then | |||||
| ADAPTIVEMODE=$FALSE | |||||
| MODE="PDFINFO" | |||||
| return $TRUE | |||||
| else | |||||
| echo "Invalid mode: $1" | |||||
| echo "Falling back to adaptive mode!" | |||||
| ADAPTIVEMODE=$TRUE | |||||
| MODE="" | |||||
| return $FALSE | |||||
| fi | |||||
| return $FALSE | |||||
| if [[ -z $1 ]]; then | |||||
| echo "Mode is empty, please specify the desired mode" | |||||
| echo "Falling back to adaptive mode!" | |||||
| ADAPTIVEMODE=$TRUE | |||||
| MODE="" | |||||
| return $FALSE | |||||
| fi | |||||
| if [[ $1 = 'c' || $1 = 'catgrep' || $1 = 'cat+grep' || $1 = 'CatGrep' || $1 = 'C' || $1 = 'CATGREP' ]]; then | |||||
| ADAPTIVEMODE=$FALSE | |||||
| MODE="CATGREP" | |||||
| return $TRUE | |||||
| elif [[ $1 = 'i' || $1 = 'imagemagick' || $1 = 'identify' || $1 = 'ImageMagick' || $1 = 'Identify' || $1 = 'I' || $1 = 'IDENTIFY' ]]; then | |||||
| ADAPTIVEMODE=$FALSE | |||||
| MODE="IDENTIFY" | |||||
| return $TRUE | |||||
| elif [[ $1 = 'm' || $1 = 'mdls' || $1 = 'MDLS' || $1 = 'quartz' || $1 = 'mac' || $1 = 'M' ]]; then | |||||
| ADAPTIVEMODE=$FALSE | |||||
| MODE="MDLS" | |||||
| return $TRUE | |||||
| elif [[ $1 = 'p' || $1 = 'pdfinfo' || $1 = 'PDFINFO' || $1 = 'PdfInfo' || $1 = 'P' ]]; then | |||||
| ADAPTIVEMODE=$FALSE | |||||
| MODE="PDFINFO" | |||||
| return $TRUE | |||||
| elif [[ $1 = 'a' || $1 = 'adaptive' || $1 = 'automatic' || $1 = 'A' || $1 = 'ADAPTIVE' || $1 = 'AUTOMATIC' ]]; then | |||||
| ADAPTIVEMODE=$TRUE | |||||
| MODE="" | |||||
| return $TRUE | |||||
| else | |||||
| echo "Invalid mode: $1" | |||||
| echo "Falling back to adaptive mode!" | |||||
| ADAPTIVEMODE=$TRUE | |||||
| MODE="" | |||||
| return $FALSE | |||||
| fi | |||||
| return $FALSE | |||||
| } | } | ||||
| # Gets page size using imagemagick's identify | # Gets page size using imagemagick's identify | ||||
| getPageSizeImagemagick() { | getPageSizeImagemagick() { | ||||
| # Sanity | |||||
| if [[ ! -f $IDBIN && $ADAPTIVEMODE = $FALSE ]]; then | |||||
| # Sanity | |||||
| if [[ ! -f $IDBIN && $ADAPTIVEMODE = $FALSE ]]; then | |||||
| echo "Error! ImageMagick's Identify was not found!" | echo "Error! ImageMagick's Identify was not found!" | ||||
| echo "Make sure you installed ImageMagick and have identify on your \$PATH" | echo "Make sure you installed ImageMagick and have identify on your \$PATH" | ||||
| echo "Aborting! You may want to try the adaptive mode." | echo "Aborting! You may want to try the adaptive mode." | ||||
| exit 15 | exit 15 | ||||
| elif [[ ! -f $IDBIN && $ADAPTIVEMODE = $TRUE ]]; then | |||||
| return $FALSE | |||||
| elif [[ ! -f $IDBIN && $ADAPTIVEMODE = $TRUE ]]; then | |||||
| return $FALSE | |||||
| fi | fi | ||||
| # get data from image magick | # get data from image magick | ||||
| local identify="$("$IDBIN" -format '%[fx:w] %[fx:h]BREAKME' "$INFILEPDF" 2>/dev/null)" | local identify="$("$IDBIN" -format '%[fx:w] %[fx:h]BREAKME' "$INFILEPDF" 2>/dev/null)" | ||||
| # No page size data available | |||||
| # No page size data available | |||||
| if [[ -z $identify && $ADAPTIVEMODE = $FALSE ]]; then | if [[ -z $identify && $ADAPTIVEMODE = $FALSE ]]; then | ||||
| echo "Error when reading input file!" | echo "Error when reading input file!" | ||||
| echo "Could not determine the page size!" | echo "Could not determine the page size!" | ||||
| echo "ImageMagicks's Identify returned an empty string!" | echo "ImageMagicks's Identify returned an empty string!" | ||||
| echo "Aborting! You may want to try the adaptive mode." | echo "Aborting! You may want to try the adaptive mode." | ||||
| exit 15 | exit 15 | ||||
| elif [[ -z $identify && $ADAPTIVEMODE = $TRUE ]]; then | |||||
| return $FALSE | |||||
| elif [[ -z $identify && $ADAPTIVEMODE = $TRUE ]]; then | |||||
| return $FALSE | |||||
| fi | fi | ||||
| identify="${identify%%BREAKME*}" # get page size only for 1st page | identify="${identify%%BREAKME*}" # get page size only for 1st page | ||||
| @@ -232,33 +237,33 @@ getPageSizeImagemagick() { | |||||
| # Gets page size using Mac Quarts mdls | # Gets page size using Mac Quarts mdls | ||||
| getPageSizeMdls() { | getPageSizeMdls() { | ||||
| # Sanity | |||||
| if [[ ! -f $MDLSBIN && $ADAPTIVEMODE = $FALSE ]]; then | |||||
| # Sanity | |||||
| if [[ ! -f $MDLSBIN && $ADAPTIVEMODE = $FALSE ]]; then | |||||
| echo "Error! Mac Quartz mdls was not found!" | echo "Error! Mac Quartz mdls was not found!" | ||||
| echo "Are you even trying this on a Mac?" | echo "Are you even trying this on a Mac?" | ||||
| echo "Aborting! You may want to try the adaptive mode." | echo "Aborting! You may want to try the adaptive mode." | ||||
| exit 15 | exit 15 | ||||
| elif [[ ! -f $MDLSBIN && $ADAPTIVEMODE = $TRUE ]]; then | |||||
| return $FALSE | |||||
| elif [[ ! -f $MDLSBIN && $ADAPTIVEMODE = $TRUE ]]; then | |||||
| return $FALSE | |||||
| fi | fi | ||||
| # get data from mdls | # get data from mdls | ||||
| local identify="$("$MDLSBIN" -mdls -name kMDItemPageHeight -name kMDItemPageWidth "$INFILEPDF" 2>/dev/null)" | local identify="$("$MDLSBIN" -mdls -name kMDItemPageHeight -name kMDItemPageWidth "$INFILEPDF" 2>/dev/null)" | ||||
| if [[ -z $identify && $ADAPTIVEMODE = $FALSE ]]; then | |||||
| if [[ -z $identify && $ADAPTIVEMODE = $FALSE ]]; then | |||||
| echo "Error when reading input file!" | echo "Error when reading input file!" | ||||
| echo "Could not determine the page size!" | echo "Could not determine the page size!" | ||||
| echo "Mac Quartz mdls returned an empty string!" | echo "Mac Quartz mdls returned an empty string!" | ||||
| echo "Aborting! You may want to try the adaptive mode." | echo "Aborting! You may want to try the adaptive mode." | ||||
| exit 15 | exit 15 | ||||
| elif [[ -z $identify && $ADAPTIVEMODE = $TRUE ]]; then | |||||
| return $FALSE | |||||
| elif [[ -z $identify && $ADAPTIVEMODE = $TRUE ]]; then | |||||
| return $FALSE | |||||
| fi | fi | ||||
| identify=${identify//$'\t'/ } # change tab to space | identify=${identify//$'\t'/ } # change tab to space | ||||
| identify=($identify) # make it an array | identify=($identify) # make it an array | ||||
| PGWIDTH=$(printf '%.0f' "${identify[2]}") # assign | PGWIDTH=$(printf '%.0f' "${identify[2]}") # assign | ||||
| PGHEIGHT=$(printf '%.0f' "${identify[5]}") # assign | PGHEIGHT=$(printf '%.0f' "${identify[5]}") # assign | ||||
| } | } | ||||
| @@ -266,40 +271,32 @@ getPageSizeMdls() { | |||||
| # Gets page size using Linux PdfInfo | # Gets page size using Linux PdfInfo | ||||
| getPageSizePdfInfo() { | getPageSizePdfInfo() { | ||||
| # Sanity | |||||
| if [[ ! -f $PDFINFOBIN && $ADAPTIVEMODE = $FALSE ]]; then | |||||
| # Sanity | |||||
| if [[ ! -f $PDFINFOBIN && $ADAPTIVEMODE = $FALSE ]]; then | |||||
| echo "Error! Linux pdfinfo was not found!" | echo "Error! Linux pdfinfo was not found!" | ||||
| echo "Do you have pdfinfo installed and available on your \$PATH?" | echo "Do you have pdfinfo installed and available on your \$PATH?" | ||||
| echo "Aborting! You may want to try the adaptive mode." | echo "Aborting! You may want to try the adaptive mode." | ||||
| exit 15 | exit 15 | ||||
| elif [[ ! -f $PDFINFOBIN && $ADAPTIVEMODE = $TRUE ]]; then | |||||
| return $FALSE | |||||
| elif [[ ! -f $PDFINFOBIN && $ADAPTIVEMODE = $TRUE ]]; then | |||||
| return $FALSE | |||||
| fi | fi | ||||
| # get data from image magick | # get data from image magick | ||||
| local identify="$("$PDFINFOBIN" "$INFILEPDF" 2>/dev/null | grep -i 'Page size:' )" | local identify="$("$PDFINFOBIN" "$INFILEPDF" 2>/dev/null | grep -i 'Page size:' )" | ||||
| if [[ -z $identify && $ADAPTIVEMODE = $FALSE ]]; then | |||||
| if [[ -z $identify && $ADAPTIVEMODE = $FALSE ]]; then | |||||
| echo "Error when reading input file!" | echo "Error when reading input file!" | ||||
| echo "Could not determine the page size!" | echo "Could not determine the page size!" | ||||
| echo "Linux PdfInfo returned an empty string!" | echo "Linux PdfInfo returned an empty string!" | ||||
| echo "Aborting! You may want to try the adaptive mode." | echo "Aborting! You may want to try the adaptive mode." | ||||
| exit 15 | exit 15 | ||||
| elif [[ -z $identify && $ADAPTIVEMODE = $TRUE ]]; then | |||||
| return $FALSE | |||||
| elif [[ -z $identify && $ADAPTIVEMODE = $TRUE ]]; then | |||||
| return $FALSE | |||||
| fi | fi | ||||
| identify="${identify##*Page size:}" | |||||
| echo "-->$identify" | |||||
| identify=($identify) # make it an array | |||||
| echo " - ${identify[0]}" | |||||
| echo " - ${identify[1]}" | |||||
| echo " - ${identify[2]}" | |||||
| echo " - ${identify[3]}" | |||||
| echo " - ${identify[4]}" | |||||
| identify="${identify##*Page size:}" # remove stuff | |||||
| identify=($identify) # make it an array | |||||
| PGWIDTH=$(printf '%.0f' "${identify[0]}") # assign | PGWIDTH=$(printf '%.0f' "${identify[0]}") # assign | ||||
| PGHEIGHT=$(printf '%.0f' "${identify[2]}") # assign | PGHEIGHT=$(printf '%.0f' "${identify[2]}") # assign | ||||
| } | } | ||||
| @@ -323,8 +320,8 @@ getPageSizeCatGrep() { | |||||
| echo "There is no MediaBox in the pdf document!" | echo "There is no MediaBox in the pdf document!" | ||||
| echo "Aborting! You may want to try the adaptive mode." | echo "Aborting! You may want to try the adaptive mode." | ||||
| exit 15 | exit 15 | ||||
| elif [[ -z $mediaBox && $ADAPTIVEMODE = $TRUE ]]; then | |||||
| return $FALSE | |||||
| elif [[ -z $mediaBox && $ADAPTIVEMODE = $TRUE ]]; then | |||||
| return $FALSE | |||||
| fi | fi | ||||
| # remove chars [ and ] | # remove chars [ and ] | ||||
| @@ -345,59 +342,61 @@ getPageSizeCatGrep() { | |||||
| PGWIDTH=$(printf '%.0f' "${mediaBox[2]}") # Get Round Width | PGWIDTH=$(printf '%.0f' "${mediaBox[2]}") # Get Round Width | ||||
| PGHEIGHT=$(printf '%.0f' "${mediaBox[3]}") # Get Round Height | PGHEIGHT=$(printf '%.0f' "${mediaBox[3]}") # Get Round Height | ||||
| return $TRUE | |||||
| return $TRUE | |||||
| } | } | ||||
| # Detects operation mode and also runs the adaptive mode | |||||
| getPageSize() { | getPageSize() { | ||||
| if [[ $ADAPTIVEMODE = $FALSE ]]; then | |||||
| vprint " Adaptive mode: Disabled" | |||||
| if [[ $MODE = "CATGREP" ]]; then | |||||
| vprint " Method: Cat + Grep" | |||||
| getPageSizeCatGrep | |||||
| elif [[ $MODE = "MDLS" ]]; then | |||||
| vprint " Method: Mac Quartz mdls" | |||||
| getPageSizeMdls | |||||
| elif [[ $MODE = "PDFINFO" ]]; then | |||||
| vprint " Method: Linux PdfInfo" | |||||
| getPageSizePdfInfo | |||||
| elif [[ $MODE = "IDENTIFY" ]]; then | |||||
| vprint " Method: ImageMagick's Identify" | |||||
| getPageSizeImagemagick | |||||
| else | |||||
| echo "Error! Invalid Mode: $MODE" | |||||
| echo "Aborting execution..." | |||||
| exit 20 | |||||
| fi | |||||
| return $TRUE | |||||
| fi | |||||
| vprint " Adaptive mode: Enabled" | |||||
| vprint " Method: Cat + Grep" | |||||
| getPageSizeCatGrep | |||||
| if [[ -z $PGWIDTH && -z $PGHEIGHT ]]; then | |||||
| vprint " Failed" | |||||
| if [[ $OSNAME = "Darwin" ]]; then | |||||
| vprint " Method: Mac Quartz mdls" | |||||
| getPageSizeMdls | |||||
| else | |||||
| vprint " Method: Linux PdfInfo" | |||||
| getPageSizePdfInfo | |||||
| fi | |||||
| fi | |||||
| if [[ -z $PGWIDTH && -z $PGHEIGHT ]]; then | |||||
| vprint " Failed" | |||||
| vprint " Method: ImageMagick's Identify" | |||||
| getPageSizeImagemagick | |||||
| fi | |||||
| if [[ -z $PGWIDTH && -z $PGHEIGHT ]]; then | |||||
| vprint " Failed" | |||||
| echo "Error when detecting PDF paper size!" | |||||
| echo "All methods of detection failed" | |||||
| exit 17 | |||||
| fi | |||||
| if [[ $ADAPTIVEMODE = $FALSE ]]; then | |||||
| vprint " Adaptive mode: Disabled" | |||||
| if [[ $MODE = "CATGREP" ]]; then | |||||
| vprint " Method: Cat + Grep" | |||||
| getPageSizeCatGrep | |||||
| elif [[ $MODE = "MDLS" ]]; then | |||||
| vprint " Method: Mac Quartz mdls" | |||||
| getPageSizeMdls | |||||
| elif [[ $MODE = "PDFINFO" ]]; then | |||||
| vprint " Method: Linux PdfInfo" | |||||
| getPageSizePdfInfo | |||||
| elif [[ $MODE = "IDENTIFY" ]]; then | |||||
| vprint " Method: ImageMagick's Identify" | |||||
| getPageSizeImagemagick | |||||
| else | |||||
| echo "Error! Invalid Mode: $MODE" | |||||
| echo "Aborting execution..." | |||||
| exit 20 | |||||
| fi | |||||
| return $TRUE | |||||
| fi | |||||
| vprint " Adaptive mode: Enabled" | |||||
| vprint " Method: Cat + Grep" | |||||
| getPageSizeCatGrep | |||||
| if [[ -z $PGWIDTH && -z $PGHEIGHT ]]; then | |||||
| vprint " Failed" | |||||
| if [[ $OSNAME = "Darwin" ]]; then | |||||
| vprint " Method: Mac Quartz mdls" | |||||
| getPageSizeMdls | |||||
| else | |||||
| vprint " Method: Linux PdfInfo" | |||||
| getPageSizePdfInfo | |||||
| fi | |||||
| fi | |||||
| if [[ -z $PGWIDTH && -z $PGHEIGHT ]]; then | |||||
| vprint " Failed" | |||||
| vprint " Method: ImageMagick's Identify" | |||||
| getPageSizeImagemagick | |||||
| fi | |||||
| if [[ -z $PGWIDTH && -z $PGHEIGHT ]]; then | |||||
| vprint " Failed" | |||||
| echo "Error when detecting PDF paper size!" | |||||
| echo "All methods of detection failed" | |||||
| echo "You may want to install pdfinfo or imagemagick" | |||||
| exit 17 | |||||
| fi | |||||
| } | } | ||||
| @@ -455,11 +454,12 @@ GSBIN="$(which gs 2>/dev/null)" | |||||
| BCBIN="$(which bc 2>/dev/null)" | BCBIN="$(which bc 2>/dev/null)" | ||||
| IDBIN=$(which identify 2>/dev/null) | IDBIN=$(which identify 2>/dev/null) | ||||
| if [[ $OSNAME = "Darwin" ]]; then | if [[ $OSNAME = "Darwin" ]]; then | ||||
| MDLSBIN="$(which mdls 2>/dev/null)" | |||||
| MDLSBIN="$(which mdls 2>/dev/null)" | |||||
| else | else | ||||
| PDFINFOBIN="$(which pdfinfo 2>/dev/null)" | |||||
| PDFINFOBIN="$(which pdfinfo 2>/dev/null)" | |||||
| fi | fi | ||||
| # Verbose scale info | # Verbose scale info | ||||
| vprint " Scale factor: $SCALE" | vprint " Scale factor: $SCALE" | ||||
| @@ -480,16 +480,8 @@ else | |||||
| fi | fi | ||||
| vprint " Output file: $OUTFILEPDF" | vprint " Output file: $OUTFILEPDF" | ||||
| getPageSize | |||||
| # Set PGWIDTH and PGHEIGHT | |||||
| #if [[ $USEIMGMGK -eq $TRUE ]]; then | |||||
| # getPageSizeImagemagick | |||||
| #elif [[ $USECATGREP -eq $TRUE ]]; then | |||||
| # getPageSize | |||||
| #else | |||||
| # getPageSizeGS | |||||
| #fi | |||||
| getPageSize | |||||
| vprint " Width: $PGWIDTH postscript-points" | vprint " Width: $PGWIDTH postscript-points" | ||||
| vprint " Height: $PGHEIGHT postscript-points" | vprint " Height: $PGHEIGHT postscript-points" | ||||