aboutsummaryrefslogtreecommitdiff
path: root/lp/process/pdfgs
diff options
context:
space:
mode:
Diffstat (limited to 'lp/process/pdfgs')
-rwxr-xr-xlp/process/pdfgs78
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 ''