summaryrefslogtreecommitdiff
path: root/pdf2png
diff options
context:
space:
mode:
authorPatrick Simianer <p@simianer.de>2014-08-10 11:19:38 +0100
committerPatrick Simianer <p@simianer.de>2014-08-10 11:19:38 +0100
commit5869505d64c04c536bdcd71a197ade918c36bf1c (patch)
tree6af5232a9f2e058f15230a370a960f89871a2b74 /pdf2png
init
Diffstat (limited to 'pdf2png')
-rwxr-xr-xpdf2png226
1 files changed, 226 insertions, 0 deletions
diff --git a/pdf2png b/pdf2png
new file mode 100755
index 0000000..0676440
--- /dev/null
+++ b/pdf2png
@@ -0,0 +1,226 @@
+#!/bin/bash
+###############################################################################
+# #
+# Martin Bruchanov, bruxy at regnet dot cz #
+# #
+# http://bruxy.regnet.cz/ #
+# #
+# Version: 1.2 (Fri Jul 20 13:17:18 CEST 2012) #
+# #
+###############################################################################
+
+## Defaults
+DEFAULT_DPI=300 # default output dpi
+GS_DPI=300 # gs will rasterize to this size, before resizing
+UNSHARP_RADIUS=1.0 # bitmap enhancing with unsharp mask
+COLORS=16777216 # default num. of colors, use 16, 256,...
+
+## Global variables
+PAGE_START=1
+PAGE_STOP=1
+WIDTH=0
+HEIGHT=0
+PAGE=0
+ALL=0
+
+## Help
+print_help(){
+ echo "PDF2PNG"
+ echo "Usage: " `basename $0` [OPTIONS] FILE
+ echo
+ echo "Options:"
+ echo " -h ... this help"
+ echo " -a ... convert all pages"
+ echo " -f N ... from page number N"
+ echo " -t N ... to page number N"
+ echo " -p N ... only page N (default N = 1)"
+ echo " -d N ... resolution in dpi (default N = $DEFAULT_DPI)"
+ echo " -x N ... bitmap width in pixel (if y not given, save aspect ratio)"
+ echo " -y N ... bitmap height in pixel (if x not given, save aspect ratio)"
+ echo " -u N ... unsharp radius (default N = $UNSHARP_RADIUS)"
+ echo " -c N ... number of colors (default N = $COLORS)"
+ echo
+}
+
+# definition of color escape sequences for ANSI terminal
+RED="\033[01;31m"
+GREEN="\033[01;32m"
+
+color_echo(){
+# 1 -- color escape sequncy
+# 2 -- string
+# \033[0m -- reset color settings
+ echo -e "$1 $2 \033[0m"
+}
+
+
+test_return(){
+# 1 -- return code $?
+# 2 -- description of operation
+echo -e -n $2:
+COL=40
+# move cursor to column $COL
+echo -en "\033[${COL}G"
+if [ $1 -eq 0 ]
+then
+ color_echo $GREEN OK
+else
+ color_echo $RED FALSE
+ exit 1
+fi
+}
+
+if [ $# -lt 1 ] # print help
+then
+ print_help
+ exit 1
+fi
+
+## Process CLI
+
+while getopts "af:t:d:hx:y:w:u:p:c:" name
+do
+ case $name in
+ a) ALL=1
+ ;;
+ f) PAGE_START=$OPTARG
+ ;;
+ t) PAGE_STOP=$OPTARG
+ ;;
+ p) PAGE=$OPTARG
+ ;;
+ d) DEFAULT_DPI=$OPTARG
+ ;;
+ x) WIDTH=$OPTARG
+ ;;
+ y) HEIGHT=$OPTARG
+ ;;
+ u) UNSHARP_RADIUS=$OPTARG
+ ;;
+ c) COLORS=$OPTARG
+ ;;
+ h) # help
+ print_help
+ exit 0
+ ;;
+ \?)
+ echo "Invalid option!"
+ exit 1
+ ;;
+ esac
+done
+
+
+shift $(($OPTIND - 1));
+
+INPUT=$1
+
+OUTPUT=$(basename $INPUT .pdf)
+
+echo "Input file: $INPUT"
+
+## Check all input parameters and set options
+
+if [ -z "$INPUT" ]
+then
+ echo "No input file!"
+ exit 1
+fi
+
+# All pages processing
+
+MAX_PAGE=`pdfinfo "$INPUT" | grep Pages | awk '{ print $2}'`
+
+if [ -z $MAX_PAGE ]; then exit; fi
+
+if [ $ALL -eq 1 ]
+then
+ PAGE_START=1
+ PAGE_STOP=$MAX_PAGE
+fi
+
+# Page range processing
+
+if [ $PAGE_START -gt 1 ]
+then
+ if [ $PAGE_STOP -eq 1 ]
+ then
+ PAGE_STOP=$MAX_PAGE
+ fi
+fi
+
+if [ $PAGE_STOP -gt 1 ]
+then
+ if [ $PAGE_START -eq 1 ]
+ then
+ PAGE_START=1
+ fi
+fi
+
+if [ $PAGE -gt 0 ]
+then
+ PAGE_START=$PAGE
+ PAGE_STOP=$PAGE
+fi
+
+# Image size
+
+if [ $WIDTH -gt 0 ]
+then
+ if [ $HEIGHT -gt 0 ]
+ then
+ RESIZE=${WIDTH}x${HEIGHT}\!
+ else
+ RESIZE=${WIDTH}x
+ fi
+ DEFAULT_DPI=0
+fi
+
+if [ $HEIGHT -gt 0 ]
+then
+ if [ $WIDTH -gt 0 ]
+ then
+ RESIZE=${WIDTH}x${HEIGHT}\!
+ else
+ RESIZE=x${HEIGHT}
+ fi
+ DEFAULT_DPI=0
+fi
+
+if [ $DEFAULT_DPI -gt 0 ]
+then
+ RESIZE=$(((DEFAULT_DPI*100)/GS_DPI))"%"
+fi
+
+echo $RESIZE
+#exit
+
+##############################################################################
+
+echo "Rasterizing pages from $PAGE_START to $PAGE_STOP."
+echo "Output image size: $RESIZE"
+
+j=1
+N=$((PAGE_STOP-PAGE_START+1))
+for i in `seq $PAGE_START $PAGE_STOP`
+do
+ i=`printf %04u $i`
+ echo "Processing page no. $i ($j/$N)"
+ TMP=/tmp/tmp-${i}.png
+ gs -q -sDEVICE=png16m -dBATCH -dNOPAUSE \
+ -dFirstPage=$i -dLastPage=$i -r$GS_DPI \
+ -sOutputFile=$TMP "$INPUT" > /dev/null 2>&1
+
+ test_return $? "GhostScript conversion"
+
+ convert \
+ -unsharp "$UNSHARP_RADIUS" \
+ -resize "${RESIZE}" \
+ -colors $COLORS +dither \
+ $TMP png:${OUTPUT}_${i}.png
+
+ rm -f $TMP
+ : $((j++))
+done
+
+