diff options
Diffstat (limited to 'sys/lib/lp/process/pdfgs')
| -rwxr-xr-x | sys/lib/lp/process/pdfgs | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/sys/lib/lp/process/pdfgs b/sys/lib/lp/process/pdfgs new file mode 100755 index 000000000..42a213aeb --- /dev/null +++ b/sys/lib/lp/process/pdfgs @@ -0,0 +1,71 @@ +#!/bin/rc +# pdfgs pdffile [gsdev] - generate PS from PDF +# +# we don't go through postscript, because to +# get to postscript, we send the pdf through gs! +# much easier to just go directly. + +switch($#*) { +case 2 + GSDEVICE=$2 +case 1 + GSDEVICE=`{echo $LPCLASS | sed 's/(.*\+)?gs!([^+]*)(\+.*)?/\2/'} +case * + echo 'usage: pdfgs pdffile [gsdev]' >[1=2] + exit usage +} + +GSTMPFILE=/tmp/pdf^$pid +GSOPT=('-sDEVICE='$GSDEVICE '-sOutputFile='^$GSTMPFILE -dSAFER -dNOPAUSE \ + -dQUIET -dBATCH -dNOPAUSE) + +# ps level 1 is extremely verbose and tends to run our +# printers out of memory when printing images. +if(~ $GSDEVICE pswrite && ~ $LPCLASS *post2*) + GSOPT=($GSOPT '-dLanguageLevel=2') +if not 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 '' |
