| @@ -11,7 +11,7 @@ | |||
| # And: https://gist.github.com/MichaelJCole/86e4968dbfc13256228a | |||
| VERSION="1.1.3" | |||
| VERSION="1.2.1" | |||
| SCALE="0.95" # scaling factor (0.95 = 95%, e.g.) | |||
| VERBOSE=0 # verbosity Level | |||
| BASENAME="$(basename $0)" # simplified name of this script | |||
| @@ -24,16 +24,16 @@ LC_CTYPE="C" | |||
| LC_NUMERIC="C" | |||
| printVersion() { | |||
| if [[ $1 -eq 2 ]]; then | |||
| echo >&2 "$BASENAME v$VERSION" | |||
| else | |||
| echo "$BASENAME v$VERSION" | |||
| fi | |||
| if [[ $1 -eq 2 ]]; then | |||
| echo >&2 "$BASENAME v$VERSION" | |||
| else | |||
| echo "$BASENAME v$VERSION" | |||
| fi | |||
| } | |||
| printHelp() { | |||
| printVersion | |||
| echo " | |||
| printVersion | |||
| echo " | |||
| Usage: $BASENAME [-v] [-s <factor>] <inFile.pdf> [outfile.pdf] | |||
| $BASENAME -h | |||
| $BASENAME -V | |||
| @@ -69,72 +69,86 @@ Examples: | |||
| } | |||
| usage() { | |||
| printVersion 2 | |||
| echo >&2 "Usage: $BASENAME [-v] [-s <factor>] <inFile.pdf> [outfile.pdf]" | |||
| echo >&2 "Try: $BASENAME -h # for help" | |||
| exit 1 | |||
| printVersion 2 | |||
| echo >&2 "Usage: $BASENAME [-v] [-s <factor>] <inFile.pdf> [outfile.pdf]" | |||
| echo >&2 "Try: $BASENAME -h # for help" | |||
| exit 1 | |||
| } | |||
| vprint() { | |||
| [[ $VERBOSE -eq 0 ]] && return 0 | |||
| timestamp="" | |||
| [[ $VERBOSE -gt 1 ]] && timestamp="$(date +%Y-%m-%d:%H:%M:%S) | " | |||
| echo "$timestamp$1" | |||
| [[ $VERBOSE -eq 0 ]] && return 0 | |||
| timestamp="" | |||
| [[ $VERBOSE -gt 1 ]] && timestamp="$(date +%Y-%m-%d:%H:%M:%S) | " | |||
| echo "$timestamp$1" | |||
| } | |||
| printDependency() { | |||
| printVersion 2 | |||
| echo >&2 $'\n'"ERROR! You need to install the package '$1'"$'\n' | |||
| echo >&2 "Linux apt-get.: sudo apt-get install $1" | |||
| echo >&2 "Linux yum.....: sudo yum install $1" | |||
| echo >&2 "MacOS homebrew: brew install $1" | |||
| echo >&2 $'\n'"Aborting..." | |||
| exit 3 | |||
| printVersion 2 | |||
| echo >&2 $'\n'"ERROR! You need to install the package '$1'"$'\n' | |||
| echo >&2 "Linux apt-get.: sudo apt-get install $1" | |||
| echo >&2 "Linux yum.....: sudo yum install $1" | |||
| echo >&2 "MacOS homebrew: brew install $1" | |||
| echo >&2 $'\n'"Aborting..." | |||
| exit 3 | |||
| } | |||
| parseScale() { | |||
| if ! [[ -n "$1" && "$1" =~ ^-?[0-9]*([.][0-9]+)?$ && (($1 > 0 )) ]] ; then | |||
| echo >&2 "Invalid factor: $1" | |||
| echo >&2 "The factor must be a floating point number greater than 0" | |||
| echo >&2 "Example: for 80% use 0.8" | |||
| exit 2 | |||
| fi | |||
| SCALE=$1 | |||
| if ! [[ -n "$1" && "$1" =~ ^-?[0-9]*([.][0-9]+)?$ && (($1 > 0 )) ]] ; then | |||
| echo >&2 "Invalid factor: $1" | |||
| echo >&2 "The factor must be a floating point number greater than 0" | |||
| echo >&2 "Example: for 80% use 0.8" | |||
| exit 2 | |||
| fi | |||
| SCALE=$1 | |||
| } | |||
| getPageSize() { | |||
| # get MediaBox info from PDF file using cat and grep, these are all possible | |||
| # /MediaBox [0 0 595 841] | |||
| # /MediaBox [ 0 0 595.28 841.89] | |||
| # /MediaBox[ 0 0 595.28 841.89 ] | |||
| local mediaBox="$(cat "$INFILEPDF" | grep -a '/MediaBox')" # done with externals | |||
| if [[ -z $mediaBox ]]; then | |||
| mediaBox="$(cat "$INFILEPDF" | grep -a '/BBox')" # if no mediaBox | |||
| fi | |||
| if [[ -z $mediaBox ]]; then | |||
| echo "Error when reading input file!" | |||
| echo "Could not determine the page size!" | |||
| echo "There is no MediaBox or BBox in the pdf document!" | |||
| echo "Aborting..." | |||
| exit 15 | |||
| fi | |||
| #mediaBox="/MediaBox [0 0 595 841]" | |||
| #echo "mediaBox $mediaBox" | |||
| mediaBox="${mediaBox#*0 0 }" | |||
| #echo "mediaBox $mediaBox" | |||
| PGWIDTH=$(printf '%.0f' "${mediaBox%% *}") # Get Round Width | |||
| #echo "PGWIDTH $PGWIDTH" | |||
| mediaBox="${mediaBox#* }" | |||
| #echo "mediaBox $mediaBox" | |||
| PGHEIGHT="${mediaBox%%]*}" # Get value, may have spaces | |||
| #echo "PGHEIGHT $PGHEIGHT" | |||
| PGHEIGHT=$(printf '%.0f' "${PGHEIGHT%% *}") # Get Round Height | |||
| #echo "PGHEIGHT $PGHEIGHT" | |||
| vprint " Width: $PGWIDTH postscript-points" | |||
| vprint " Height: $PGHEIGHT postscript-points" | |||
| # get MediaBox info from PDF file using cat and grep, these are all possible | |||
| # /MediaBox [0 0 595 841] | |||
| # /MediaBox [ 0 0 595.28 841.89] | |||
| # /MediaBox[ 0 0 595.28 841.89 ] | |||
| # Get MediaBox data if possible | |||
| local mediaBox="$(cat "$INFILEPDF" | grep -a '/MediaBox')" | |||
| # If no MediaBox, try BBox | |||
| if [[ -z $mediaBox ]]; then | |||
| mediaBox="$(cat "$INFILEPDF" | grep -a '/BBox')" | |||
| fi | |||
| # No page size data available | |||
| if [[ -z $mediaBox ]]; then | |||
| echo "Error when reading input file!" | |||
| echo "Could not determine the page size!" | |||
| echo "There is no MediaBox or BBox in the pdf document!" | |||
| echo "Aborting..." | |||
| exit 15 | |||
| fi | |||
| # remove chars [ and ] | |||
| mediaBox="${mediaBox//[}" | |||
| mediaBox="${mediaBox//]}" | |||
| mediaBox=($mediaBox) # make it an array | |||
| mbCount=${#mediaBox[@]} # array size | |||
| # sanity | |||
| if [[ $mbCount -lt 5 ]]; then | |||
| echo "Error when reading the page size!" | |||
| echo "The page size information is invalid!" | |||
| exit 16 | |||
| fi | |||
| # we are done | |||
| PGWIDTH=$(printf '%.0f' "${mediaBox[3]}") # Get Round Width | |||
| PGHEIGHT=$(printf '%.0f' "${mediaBox[4]}") # Get Round Height | |||
| vprint " Width: $PGWIDTH postscript-points" | |||
| vprint " Height: $PGHEIGHT postscript-points" | |||
| } | |||
| # Parse options | |||
| while getopts ":vhVs:" o; do | |||
| case "${o}" in | |||
| v) | |||
| @@ -158,6 +172,11 @@ while getopts ":vhVs:" o; do | |||
| done | |||
| shift $((OPTIND-1)) | |||
| ######### START EXECUTION | |||
| #Intro message | |||
| vprint "$(basename $0) v$VERSION - Verbose execution" | |||
| # Dependencies | |||
| @@ -165,9 +184,11 @@ vprint "Checking dependencies" | |||
| command -v gs >/dev/null 2>&1 || printDependency 'ghostscript' | |||
| command -v bc >/dev/null 2>&1 || printDependency 'bc' | |||
| # Get dependency binaries | |||
| GSBIN=$(which gs 2>/dev/null) | |||
| BCBIN=$(which bc 2>/dev/null) | |||
| # Verbose scale info | |||
| vprint " Scale factor: $SCALE" | |||
| # Validate args | |||
| @@ -178,9 +199,9 @@ vprint " Input file: $INFILEPDF" | |||
| # Parse output filename | |||
| if [[ -z $2 ]]; then | |||
| OUTFILEPDF="${INFILEPDF%.pdf}.SCALED.pdf" | |||
| OUTFILEPDF="${INFILEPDF%.pdf}.SCALED.pdf" | |||
| else | |||
| OUTFILEPDF="${2%.pdf}.pdf" | |||
| OUTFILEPDF="${2%.pdf}.pdf" | |||
| fi | |||
| vprint " Output file: $OUTFILEPDF" | |||