diff options
Diffstat (limited to 'lp/process/pdfgs')
-rwxr-xr-x | lp/process/pdfgs | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/lp/process/pdfgs b/lp/process/pdfgs new file mode 100755 index 00000000..90c00c07 --- /dev/null +++ b/lp/process/pdfgs @@ -0,0 +1,78 @@ +#!/usr/local/plan9/bin/rc + +# +# we don't go through postscript, because to +# get to postscript, we send the pdf through gs! +# much easier to just go directly. +# + +# usage: pdfgs pdffile [gsdev] + +switch($#*) { +case 2 + GSDEVICE=$2 +case 1 + GSDEVICE=`{echo $LPCLASS | sed 's/(.*\+)?gs!([^+]*)(\+.*)?/\2/'} +case * + echo 'usage: pdfgs pdffile [gsdev]' >[1=2] +} + +GSTMPFILE=/tmp/pdf^$pid +GSOPT=('-sDEVICE='$GSDEVICE '-sOutputFile='^$GSTMPFILE -dSAFER -dNOPAUSE -dQUIET -dBATCH -dNOPAUSE) + +# +# RSC: pswrite produces weird overbars on various +# letters, most notably Times-Roman A and h, unless +# we use LanguageLevel=1. This doesn't seem to be +# constrained to hp4simx printers, so just use LanguageLevel 1 +# all the time. +# + +#if(~ $dev pswrite && ~ $LPCLASS *hp4simx*) +# GSOPT=($GSOPT '-dLanguageLevel=1') +if(~ $GSDEVICE pswrite) + GSOPT=($GSOPT '-dLanguageLevel=1') + +if(~ $OLIST '') + gs $GSOPT $1 +if not { + PGLIST=`{echo $OLIST | sed 's/-o//;s/,/ /g;s/ / /g' | tr -cd '0-9 -'} + GSPGLIST=() + for(i in $PGLIST){ + switch($i){ + case -* + GSPGLIST=($GSPGLIST `{seq 1 `{echo $i|tr -d '-'}}) + case *- + # BUG assume 100 >= number of pages + GSPGLIST=($GSPGLIST `{seq `{echo $i|tr -d '-'} 100}) + case *-* + GSPGLIST=($GSPGLIST `{seq `{echo $i|tr '-' ' '}}) + case * + GSPGLIST=($GSPGLIST $i) + } + } + GSPGLIST=$"GSPGLIST + echo ' + /Page null def + /Page# 0 def + /PDFSave null def + /DSCPageCount 0 def + /DoPDFPage {dup /Page# exch store pdfgetpage pdfshowpage} def + GS_PDF_ProcSet begin + pdfdict begin + ('^$1^') (r) file pdfopen begin + /npage pdfpagecount def + ['^$GSPGLIST^'] + { + dup dup + 1 ge exch npage le and + { DoPDFPage } + { pop } + ifelse + } forall + ' | gs $GSOPT - >/dev/null >[2=1] +} + +cat $GSTMPFILE +rm -f $GSTMPFILE +exit '' |