aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Bottomley <JBottomley@Parallels.com>2014-07-24 16:38:20 -0700
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2020-12-06 11:37:10 -0800
commit75be4bf6a801db800e45fdce3ef3b977f3c7913c (patch)
tree0203f8a5f601beb414dea04764ec92ed1d0a6d7a
parent0678958330ae757a9fc0532f7bedb5762683a100 (diff)
downloadricoh-sp100-75be4bf6a801db800e45fdce3ef3b977f3c7913c.tar.gz
pstoricohddst-gdi: Implement dot counts
The printers need the dotcounts per page to estimate toner use, so implement this using the ImageMagick identify command. One of the fx variables is the mean, which is the average colour of the image. For b/w images, this represents the number of white pixels divided by size. Thus the black dot count is width*height*(1-mean). Tidy up some of the repeated elements in the script so this calculation is only in one place for ease of maintenance. Signed-off-by: James Bottomley <JBottomley@Parallels.com>
-rwxr-xr-xpstoricohddst-gdi159
1 files changed, 67 insertions, 92 deletions
diff --git a/pstoricohddst-gdi b/pstoricohddst-gdi
index f86f9b6..9db3b13 100755
--- a/pstoricohddst-gdi
+++ b/pstoricohddst-gdi
@@ -23,6 +23,66 @@ function stop() {
echo "stop" > $uid/999999999-page.pbm
}
+function output_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
+ x=($(identify -format "%w %h %[fx:mean] " $page))
+ ##
+ # The %[fx:mean] gives the average colour in the image which for
+ # monochrome is the number of white pixels divided by the size
+ #
+ # So the formula gives the number of black pixels. The final
+ # /1 causes bc to round to the nearest integer because scale=0
+ ##
+ dots=$(echo "(${x[0]}*${x[1]}*(1-${x[2]}))/1"|bc)
+
+ # 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=${x[0]}$e
+@PJL SET PAPERLENGTH=${x[1]}$e
+@PJL SET RESOLUTION=${resolution%x600}$e
+@PJL SET IMAGELEN=$jsize$e
+EOF
+
+ cat $uid/raster.jbig
+
+ # Flushing page footer
+ # TODO: pixelcount for toner estimate
+ cat <<EOF
+@PJL SET DOTCOUNT=$dots$e
+@PJL SET PAGESTATUS=END$e
+EOF
+}
+
+function output_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
+}
+
+function output_footer() {
+ cat <<EOF
+@PJL EOJ$e
+%-12345X
+EOF
+}
+
log "Called with cmdline: $0 $*"
trap "stop; trapINT" SIGINT SIGTERM SIGQUIT
@@ -73,60 +133,19 @@ mkdir -p $uid
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
-
+ output_header
stage="printing"
}
[ "$page" = "999999999-page.pbm" ] && {
log "Last stage. Flushing PJL footer"
- cat <<EOF
-@PJL EOJ$e
-%-12345X
-EOF
+ output_footer
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
+ page=$uid/$page
+ output_page
}
done
) &
@@ -147,58 +166,14 @@ EOF
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
+ output_header
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
+ output_page
done
# Flushing PJL footer
- cat <<EOF
-@PJL EOJ$e
-%-12345X
-EOF
+ output_footer
}