summaryrefslogtreecommitdiff
path: root/sys/lib/lp/process/pdfgs
diff options
context:
space:
mode:
Diffstat (limited to 'sys/lib/lp/process/pdfgs')
-rwxr-xr-xsys/lib/lp/process/pdfgs71
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 ''