| #!/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 '' |