83 lines
2.9 KiB
Plaintext
83 lines
2.9 KiB
Plaintext
|
#!/bin/bash
|
||
|
|
||
|
# http://www.alfredklomp.com/programming/shrinkpdf
|
||
|
# Licensed under the 3-clause BSD license:
|
||
|
#
|
||
|
# Copyright (c) 2014, Alfred Klomp
|
||
|
# All rights reserved.
|
||
|
#
|
||
|
# Redistribution and use in source and binary forms, with or without
|
||
|
# modification, are permitted provided that the following conditions are met:
|
||
|
# 1. Redistributions of source code must retain the above copyright notice,
|
||
|
# this list of conditions and the following disclaimer.
|
||
|
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
||
|
# this list of conditions and the following disclaimer in the documentation
|
||
|
# and/or other materials provided with the distribution.
|
||
|
# 3. Neither the name of the copyright holder nor the names of its contributors
|
||
|
# may be used to endorse or promote products derived from this software
|
||
|
# without specific prior written permission.
|
||
|
#
|
||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||
|
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||
|
|
||
|
|
||
|
shrink () {
|
||
|
gs \
|
||
|
-dNOPAUSE -dBATCH -dSAFER \
|
||
|
-sDEVICE=pdfwrite \
|
||
|
-dPDFSETTINGS=$3 \
|
||
|
-dEmbedAllFonts=true \
|
||
|
-dSubsetFonts=true \
|
||
|
-dAutoRotatePages=/None \
|
||
|
-dColorImageDownsampleType=/Bicubic \
|
||
|
-dColorImageResolution=$4 \
|
||
|
-dGrayImageDownsampleType=/Bicubic \
|
||
|
-dGrayImageResolution=$4 \
|
||
|
-dMonoImageDownsampleType=/Bicubic \
|
||
|
-dMonoImageResolution=$4 \
|
||
|
-sOutputFile="$2" "${@:5}" \
|
||
|
"$1"
|
||
|
}
|
||
|
|
||
|
usage () {
|
||
|
echo "Reduces PDF filesize by lossy recompressing with Ghostscript."
|
||
|
echo " Usage: $1 infile [outfile] [preset(/printer)] [image-dpi(300)]"
|
||
|
echo " Presets available (ascending quality): /screen /ebook /printer /prepress"
|
||
|
}
|
||
|
|
||
|
infile="$1"
|
||
|
|
||
|
# Need an input file:
|
||
|
if [ -z "$infile" ]; then
|
||
|
usage "$0"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
outfile="${2:-$1}"
|
||
|
if [ "$infile" = "$outfile" ]; then
|
||
|
infile="${1%.*}-original.pdf"
|
||
|
mv "$1" "$infile"
|
||
|
fi
|
||
|
quality="${3:-"/printer"}"
|
||
|
res="${4:-300}"
|
||
|
|
||
|
shrink "$infile" "$outfile" "$quality" "$res" "${@:5}" || exit $?
|
||
|
|
||
|
[ ! -f "$infile" -o ! -f "$outfile" ] && exit 0
|
||
|
ISIZE="$(echo $(wc -c "$infile") | cut -f1 -d\ )"
|
||
|
OSIZE="$(echo $(wc -c "$outfile") | cut -f1 -d\ )"
|
||
|
if [ "$ISIZE" -lt "$OSIZE" -a $# -lt 5 ]; then
|
||
|
echo "Shrinking was not successfull, doing straight copy!"
|
||
|
cp "$infile" "$outfile"
|
||
|
[ "$1" = "$outfile" ] && rm $infile
|
||
|
fi
|