[ic] Linux label printers
doug1 at ultimatepassage.com
doug1 at ultimatepassage.com
Tue Jan 18 21:03:27 EST 2005
On Tue, 18 Jan 2005, Grant wrote:
>> Just about any thermal label printer will work with Linux. We use
>> serveral old RJS barcode printers. A few Printronix barcode printers and
>> over a dozen zebra printers. There are really 2 issues that need to be
>> addressed. The first issue is simply getting over the connectivity hump.
>> If you are using a serial connection, the baud rate, parity, and handshake
>> issues must all match.
>>
>> Once this is done, the next step is to look at the programmers guide for
>> the appropriate printer. For example to print hello world on a zebra
>> printer you need something like this:
>> A30,50,0,3,1,1,N,"Hello World"^M
>> The first byte tells the printer to use straight alpha. The remaining
>> bytes up the the first comma provide the horizontal print position. The
>> 50 after the first comma is the vertical print position (in dot rows, I
>> think). The next commas separated byte is the orientation (upside down,
>> vertical, etc), the next comma separted byte is font size, etc. The last
>> element is the actual text to be printed in quotes.
>>
>> Here is a sample output to print a complete UPS Next Day air label. The
>> lower case "b" and the characters that follow generate the 2D barcode.
>> The lines that start with an uppercase "B" generate a conventional
>> barcode.
>>
>> M135,2,100^M
>> I8,0,001^M
>> N^M
>> R5,10^M
>> S4^M
>> D15^M
> [snip]
>> A30,1044,0,3,1,1,N,"ORDER NUMBER 2006"^M
>> A30,1066,0,3,1,1,N," P.O. NUMBER 3343844-1"^M
>> A598,1179,0,2,1,1,N,"URC 08/2001"^M
>>
>> Bruce
>
> Thanks Bruce. What about printing a digital TIF? I could also
> convert it to another format. I've got a perl script that does cause
> my lp0 laser printer to warm up, but it doesn't print.
>
> open (LABEL, "label.tif") or die "Could not open the label file. $!";
> open (PRINTER, ">/dev/usb/lp0") or die "Could not open the printer. $!";
> my $line = '';
> $line = <LABEL>;
> while ($line) {
> print PRINTER $line;
> $line = <LABEL>;
> }
> close(LABEL);
> close(PRINTER);
>
> I run it like 'perl print_script'. What am I missing?
>
> - Grant
> _______________________________________________
> interchange-users mailing list
> interchange-users at icdevgroup.org
> http://www.icdevgroup.org/mailman/listinfo/interchange-users
>
Zebra printers are not capable of printing a TIF. Newer zebra printers are
capable of printing PCX files. Most of the older ones use a GRF format.
The GRF format is an uncompressed pure hexadecimal data stream without any
of the PCX header information. The simplest way to create a GRF file is
to parse the PCX header for the size and then strip off the first 128
bytes.
To quote my zebra users guide the format of the command to download
graphics is:
~DGd:o.x,t,w,datastream
where ~DG puts the printer into graphic mode
d = destination name dfault value R: (DRAM)
o = name of image
x = extension (always GRF)
t = total bytes
w = byte per row
data = actual data stream in uncompressed hex
Here is a small program to print a triangle:
~DGR:TRIANGLE.GRF,42,6,
F0000000000000
FF000000000000
FFFF0000000000
FFFFFF00000000
FFFFFFFF000000
FFFFFFFFFF0000
00000000000000
^XA
^F050,50
^XGTRIANGLE.GRF,1,1^FS
^XZ
The DGR command loads the stripped PCX file into the printers RAM. The ^XA
marks the start the label command string. The ^F050,50 sets the X and Y
coordinate to 50 dots from the left and 50 dots down from the top. The
^XG command print the triangle prints the triangle. The 1,1 on the end
of the XG command controls the magnfication (scaling) on the X and Y
axis. The ^XZ command renders the label.
This may sound complicated but once you get the hang of it, it's not too
difficult. The hardest part is parsing the PCX header information to get
the PCX size and then stripping off the header information.
Bruce
More information about the interchange-users
mailing list