diff options
author | Patrick Simianer <p@simianer.de> | 2014-08-10 11:19:38 +0100 |
---|---|---|
committer | Patrick Simianer <p@simianer.de> | 2014-08-10 11:19:38 +0100 |
commit | 5869505d64c04c536bdcd71a197ade918c36bf1c (patch) | |
tree | 6af5232a9f2e058f15230a370a960f89871a2b74 /pdf2png |
init
Diffstat (limited to 'pdf2png')
-rwxr-xr-x | pdf2png | 226 |
1 files changed, 226 insertions, 0 deletions
@@ -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 + + |