Merge branch 'master' of github.com:dpavlin/Printer-Zebra
authorDobrica Pavlinusic <dpavlin@rot13.org>
Fri, 3 Feb 2012 18:30:03 +0000 (19:30 +0100)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Fri, 3 Feb 2012 18:30:03 +0000 (19:30 +0100)
ZPL2pbm.pl
pbm2ZPL.pl [new file with mode: 0755]
svg-render.pl [new file with mode: 0755]

index 818198d..860f28b 100755 (executable)
@@ -25,7 +25,7 @@ slurp_line;
 
 while( $line ) {
        $line =~ s/[\r\n]+$// && warn "## removed CR/LF\n";
-       warn "# line ",dump($line),$/;
+       warn "# line ",dump($line),$/ if length($line) < 80 or $ENV{DEBUG};
        if ( $line =~ s/~DG(\w+:)?(.+)// ) {
                my ( $name, $t,$w ) = split(/,/,$2,4);
 
@@ -37,7 +37,7 @@ while( $line ) {
                my $out;
                # ZPL decompress
                my $repeat = 1;
-               foreach my $p ( 0 .. length($data) ) {
+               foreach my $p ( 0 .. length($data) - 1 ) {
                        my $c = substr($data,$p,1);
                        if ( $c eq ',' ) {
                                my $l = ( $w * 2 ) - length($out) % ( $w * 2 );
@@ -53,7 +53,7 @@ while( $line ) {
                                $repeat += 20 * ( ord($c) - ord('f') );
                        } elsif ( $c ge 'G' && $c le 'Y' ) {
                                $repeat += ord($c) - ord('F');
-                       } elsif ( $c =~ m/[0-9A-F]/ ) {
+                       } elsif ( $c =~ m/[0-9A-F]/i ) {
                                if ( $repeat ) {
                                        warn "# $p $repeat $c\n";
                                        $out .= $c x $repeat;
@@ -86,6 +86,9 @@ while( $line ) {
                        warn "UNKNOWN: ",dump($1),$/;
                }
                $line =~ s/^[\r\n]+// && warn "## removed CR/LF\n";
+       } else {
+               my $unknown = $1 if $line =~ s/^(.)//; # printer seems to ignore invalid chars
+               warn "IGNORE: ",dump($unknown);
        }
 
        slurp_line;
diff --git a/pbm2ZPL.pl b/pbm2ZPL.pl
new file mode 100755 (executable)
index 0000000..fbe2ba3
--- /dev/null
@@ -0,0 +1,28 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+use autodie;
+use Data::Dump qw(dump);
+
+my $pnm_file = shift @ARGV || die "usage: $0 print.pnm";
+
+open(my $fh, '<', $pnm_file);
+my $p4 = <$fh>; chomp $p4;
+die "no P4 header in [$p4] from $pnm_file" unless $p4 eq 'P4';
+my $size = <$fh>; chomp $size;
+my ( $w, $h ) = split(/ /,$size,$2);
+warn "WARNING: width of $pnm_file not 832!\n" if $w != 832;
+local $/ = undef;
+my $bitmap = <$fh>;
+
+
+print "^XA~TA000~JSN^LT18^MNW^MTD^PON^PMN^LH0,0^JMA^PR4,4^MD13^JUS^LRN^CI0^XZ";
+
+printf "~DG000.GRF,%d,%d,\r\n", $w / 8 * $h, $w / 8;
+
+foreach my $y ( 0 .. $h - 1 ) {
+       my $line = substr( $bitmap, $y * ( $w / 8 ), $w / 8 );
+       print unpack('H*', $line);
+}
+
+print "^XA\r\n^MMT\r\n^LL0328\r\n^PW831\r\n^LS0\r\n^FT0,352^XG000.GRF,1,1^FS\r\n^PQ1,0,1,Y^XZ\r\n^XA^ID000.GRF^FS^XZ";
diff --git a/svg-render.pl b/svg-render.pl
new file mode 100755 (executable)
index 0000000..6624066
--- /dev/null
@@ -0,0 +1,16 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+
+# 5166 px = 1000 dpi
+
+my $w = 832;
+
+my $density = $w / 5166 * 1000;
+warn "# density = $density\n";
+
+my $from = shift @ARGV || die "usage: $0 template.svg\n";
+
+system "convert -density $density $from $from.pbm";
+
+