db3a89f3ed
The printer is annoying for this one. Unless you actually print to the bypass tray, it will ignore it, so this must be set in the printer options. The tray is also annoying to use in that it's a manual feed, accepting one sheet at a time. Anyway, add the option to specify the bypass tray in the PPD and filter. Signed-off-by: James Bottomley <JBottomley@Parallels.com>
207 lines
4.6 KiB
Bash
Executable file
207 lines
4.6 KiB
Bash
Executable file
#!/bin/bash
|
||
|
||
# Debug mode: change to 'yes' to enable
|
||
DEBUG=no
|
||
|
||
function log() {
|
||
[ "${DEBUG}" = "yes" ] && echo $* | logger -t "$0[$$]"
|
||
}
|
||
|
||
function logpipe() {
|
||
[ "${DEBUG}" = "yes" ] && echo $* | logger -t "$0[$$]"
|
||
}
|
||
|
||
function trapINT() {
|
||
log "trapINT()"
|
||
[ "x$trp" = "x" ] && trp="yes" || return
|
||
sleep 30 && { [ ! "${DEBUG}" = "yes" ] && rm -rf $uid; log "Cleanup complete"; } &
|
||
exit
|
||
}
|
||
|
||
function stop() {
|
||
log "Stop stop page";
|
||
echo "stop" > $uid/999999999-page.pbm
|
||
}
|
||
|
||
log "Called with cmdline: $0 $*"
|
||
|
||
trap "stop; trapINT" SIGINT SIGTERM SIGQUIT
|
||
#trap 'echo No' SIGINT SIGTERM SIGQUIT EXIT;
|
||
# Username
|
||
user="$2"
|
||
|
||
# Page title (not used at this time, "Document" instead)
|
||
ptitle="$3"
|
||
my="$0"
|
||
options="$5"
|
||
|
||
pagesize="A4"
|
||
resolution="600"
|
||
mediasource="TRAY1"
|
||
for opt in $options; do
|
||
case "$opt" in
|
||
PageSize=*)
|
||
pagesize="$(echo "${opt#PageSize=}" | tr a-z A-Z)"
|
||
;;
|
||
Resolution=*)
|
||
resolution=${opt#Resolution=}
|
||
resolution=${resolution%dpi}
|
||
;;
|
||
InputSlot=*)
|
||
mediasource=${opt#InputSlot=}
|
||
;;
|
||
esac
|
||
done
|
||
|
||
# MS-style EOL
|
||
e=$(echo -en "\r")
|
||
|
||
# Printing date
|
||
ddate="`LC_ALL=en_US.UTF-8 date '+%Y/%m/%d %H:%M:%S'`"
|
||
|
||
# Temporary directory
|
||
uid="/tmp/pstoricohddst-gdi-`uuidgen`"
|
||
mkdir -p $uid
|
||
[ "${DEBUG}" = "yes" ] && exec >$uid/output.stream #> >(tee $uid/output.stream)
|
||
|
||
[ -x "$(which inotifywait)" ] && {
|
||
log "Asynchronous variant"
|
||
|
||
(
|
||
stage="empty"
|
||
inotifywait -q -m -r -e close_write --format '%f' $uid | grep --line-buffered 'page.pbm$' | while read page; do
|
||
log "Page submitted"
|
||
[ "$stage" = "empty" ] && {
|
||
log "1st stage. Flushing PJL header"
|
||
cat <<EOF
|
||
%-12345X@PJL$e
|
||
@PJL SET TIMESTAMP=$ddate$e
|
||
@PJL SET FILENAME=Document$e
|
||
@PJL SET COMPRESS=JBIG$e
|
||
@PJL SET USERNAME=$user$e
|
||
@PJL SET COVER=OFF$e
|
||
@PJL SET HOLD=OFF$e
|
||
EOF
|
||
|
||
stage="printing"
|
||
}
|
||
[ "$page" = "999999999-page.pbm" ] && {
|
||
log "Last stage. Flushing PJL footer"
|
||
cat <<EOF
|
||
@PJL EOJ$e
|
||
%-12345X
|
||
EOF
|
||
pid=`ps ax | grep $uid | grep -v grep | awk ' { print $1 } '`
|
||
[ ! "x$pid" = "x" ] && kill $pid
|
||
break
|
||
}
|
||
[ "$stage" = "printing" ] && {
|
||
# Converting page to JBIG format (parameters are very special for this printer!)
|
||
pbmtojbg -p 72 -o 3 -m 0 -q < $uid/$page > $uid/raster.jbig
|
||
|
||
# Taking image size
|
||
jsize=`wc -c < $uid/raster.jbig`
|
||
|
||
# Taking image dimensions
|
||
read fn ft xs ys garb < <(identify $uid/$page | tr "x" " ")
|
||
|
||
# Flushing page header
|
||
cat <<EOF
|
||
@PJL SET PAGESTATUS=START$e
|
||
@PJL SET COPIES=1$e
|
||
@PJL SET MEDIASOURCE=$mediasource$e
|
||
@PJL SET MEDIATYPE=PLAINRECYCLE$e
|
||
@PJL SET PAPER=$pagesize$e
|
||
@PJL SET PAPERWIDTH=$xs$e
|
||
@PJL SET PAPERLENGTH=$ys$e
|
||
@PJL SET RESOLUTION=${resolution%x600}$e
|
||
@PJL SET IMAGELEN=$jsize$e
|
||
EOF
|
||
|
||
log "Flushing image $page"
|
||
cat $uid/raster.jbig
|
||
|
||
# Flushing page footer
|
||
# TODO: pixelcount for toner estimate
|
||
cat <<EOF
|
||
@PJL SET DOTCOUNT=1132782$e
|
||
@PJL SET PAGESTATUS=END$e
|
||
EOF
|
||
}
|
||
done
|
||
) &
|
||
|
||
# Converting from PostScript to PostScript-monochrome, then to PBM image format (per page)
|
||
#gs -sDEVICE=ps2write -sOutputFile=- -r$resolution -dQUIET -dBATCH -dNOPAUSE - |
|
||
gs -sDEVICE=pbmraw -sOutputFile=${uid}/%03d-page.pbm -r$resolution -dQUIET -dBATCH -dNOPAUSE -
|
||
|
||
stop
|
||
wait
|
||
|
||
trapINT
|
||
} || {
|
||
log "Synchronous variant"
|
||
|
||
# Converting from PostScript to PostScript-monochrome, then to PBM image format (per page)
|
||
log "Converting document to pages"
|
||
gs -sDEVICE=ps2write -sOutputFile=- -r$resolution -dQUIET -dBATCH -dNOPAUSE - | gs -sDEVICE=pbmraw -sOutputFile=${uid}/%03d-page.pbm -r$resolution -dQUIET -dBATCH -dNOPAUSE -
|
||
log "Conversion complete"
|
||
|
||
cat <<EOF
|
||
%-12345X@PJL$e
|
||
@PJL SET TIMESTAMP=$ddate$e
|
||
@PJL SET FILENAME=Document$e
|
||
@PJL SET COMPRESS=JBIG$e
|
||
@PJL SET USERNAME=$user$e
|
||
@PJL SET COVER=OFF$e
|
||
@PJL SET HOLD=OFF$e
|
||
EOF
|
||
|
||
for page in ${uid}/*-page.pbm; do
|
||
|
||
log "Page $page"
|
||
# Converting page to JBIG format (parameters are very special for this printer!)
|
||
pbmtojbg -p 72 -o 3 -m 0 -q < $page > $uid/raster.jbig
|
||
|
||
# Taking image size
|
||
jsize=`wc -c < $uid/raster.jbig`
|
||
|
||
# Taking image dimensions
|
||
read fn ft xs ys garb < <(identify $page | tr "x" " ")
|
||
log "Identified as ${xs}x${ys}"
|
||
|
||
# Flushing page header
|
||
cat <<EOF
|
||
@PJL SET PAGESTATUS=START$e
|
||
@PJL SET COPIES=1$e
|
||
@PJL SET MEDIASOURCE=$mediasource$e
|
||
@PJL SET MEDIATYPE=PLAINRECYCLE$e
|
||
@PJL SET PAPER=$pagesize$e
|
||
@PJL SET PAPERWIDTH=$xs$e
|
||
@PJL SET PAPERLENGTH=$ys$e
|
||
@PJL SET RESOLUTION=${resolution%x600}$e
|
||
@PJL SET IMAGELEN=$jsize$e
|
||
EOF
|
||
|
||
# Flushing image
|
||
cat $uid/raster.jbig
|
||
|
||
# Flushing page footer
|
||
# TODO: pixelcount for toner estimate
|
||
cat <<EOF
|
||
@PJL SET DOTCOUNT=1132782$e
|
||
@PJL SET PAGESTATUS=END$e
|
||
EOF
|
||
done
|
||
|
||
# Flushing PJL footer
|
||
cat <<EOF
|
||
@PJL EOJ$e
|
||
%-12345X
|
||
EOF
|
||
|
||
}
|
||
|
||
#rm -rf $uid;
|
||
|
||
exit 0
|