浏览代码

All methods tested, adaptive method is now an option as well, even though it is default; more error messages

master
父节点
当前提交
76a1a44e1d
共有 1 个文件被更改,包括 125 次插入133 次删除
  1. +125
    -133
      pdfScale.sh

+ 125
- 133
pdfScale.sh 查看文件

@@ -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"




正在加载...
取消
保存