I am developing a Windows Mobile App that requires printing into a Zebra printer. Problem is, I do not have the printer with me here in my country since the client did not provide any.
My approach was to design a label first in ZebraDesigner2, then print out the label into a text file. Printing the label to a text file instead of a printer sends out the ZPL Code to produce the label I was trying to print. Hence, I can generate ZPL codes faster by designing a label first then seeing the ZPL code. Kinda like having a drag and drop GUI with a background XML.
Say that I have this simple label that contains this text:
Hello World!
If I print this in ZebraDesigner2 it would be written to my text file as:
CT~~CD,~CC^~CT~
^XA~TA000~JSN^LT0^MNW^MTT^PON^PMN^LH0,0^JMA^PR5,5~SD15^JUS^LRN^CI0^XZ
^XA
^MMT
^PW609
^LL0406
^LS0
^FT1,29^A0N,28,28^FH\^FDHello World!^FS
^PQ1,0,1,Y^XZ
My main question is, which one do I include in my C# Code if im going to send this code to the printer via my Windows Mobile C# app? Do I include the part with ^XA until ^XZ? I believe that CT~~CD,~CC^~CT~ should not be included in my code If im not mistaken.
Late answer, but since this is getting viewed...
The CT line and first set of XA..XZ sequence sets up the modes, label length, printable area, etc.
If you remove those, it will take those settings from the label/printer settings, which is usually what you want. The printers can sense the length and width of the label.
Leaving them in can cause big problems, because if you define the printable area in your label, and then the next label type submitted does not, it will use the settings you have defined -- which can cause blank areas in the label, eg. cutoff USPS Label barcodes that are printed after your Zebra Designer custom labels.
Found this out the hard way - leave those out, and you should leave out of the remaining XA..XZ sequence the MMT, PW609, LL0406, and LS0 as well - your Hello World will not be affected.
If you really want to limit the area printed to, set up margins inside the printable area, etc, refer to the manual.
you have to look at the programmers guide before you remove anything of the code. The CT~ command for example changes the control prefix.
Search the internet or zebra.com site for "ZPL Programming guide".
So, leave the text file as is and then include that into your windows mobile application.
PS: zebra offers SDKs for label/receipt printers: http://www.zebra.com/gb/en/products-services/software/adapt-software.html
PS2: without a test printer you may get bad final results.
Related
I'm trying to build a Prisoner's Dilemma game in Z-Tree (the toolkit for building game theory experiments), and have encountered two irritating problems.
I haven't succeeded in applying formatting to the output inside of an item. Specifically, I'd like to display the number of years of prison each player gets at the end of a game, in the format:
Years of Prison: value
using the Layout dialogue of the Item box. Not using the layout and inserting the values directly into the text leads to a far too messy display.
Is there a way to do that using variables (conceptually, something like Payoff = {\rtf \fs30 Payoff}), and not concrete values (like !text: 1 = {\rtf \fs30 1}).
Is there a way to enable UTF-8 encoding? I have some letters (like č or š) which aren't being displayed correctly?
I'm using the latest Z-Tree version, on Linux ElementaryOS, running on Wine.
Answer to 1: In the label of your item, do this:
<>{\rtf Payoff = \fs30 <Payoff|0.1> }
Answer to 2: I do not know for sure. I think the font z-Tree uses by default does not support those characters. What I would try is to find a font that supports them and use it. In your code the characters will appear as weird symbols, but maybe in the leafs they'll be displayed correctly.
I am having issues with consistency of text alignment printing ZPL between official Zebra hardware and a Citizen CL-S521 (and presumably other Citizen models).
I have a label with 270 degree rotation on some fields that need to be left-aligned, yet the printer is outputting them right aligned. Equally I have some text blocks that are supposed to be right aligned, but are printing left aligned, with an incorrect field origin.
Examples:
^FWB,0
^FO40,570,0^A0,23,24^TBB,450,25FH\^FDThis should be left aligned^FS
And:
^FT790,504,1^A0N,31,31^TBN,90,31^FH\^FDThis should be right aligned^FS
Using an online ZPL viewer and other ZPL-compatible printers, this outputs correctly, just not on the Citizen models.
If anyone else has had a similar issue and resolved it I would be grateful to understand how.
If anyone else comes across this problem, I solved it using the ^FB Field Block command instead of ^TB Text Block, despite the Zebra ZPLII guide advising against this.
Citizen support confirmed their printers do not support the ^TB command at the moment.
I have an app that prints out labels to a Zebra GK420t label printer. The ZPL sends some text and a QRCode. This works fine when the printer is first turned on, but there is another app that prints to it, and after the other app has printed, the position of the QRCode changes on our labels.
I don't have access to the source for the other program so I can't see what ZPL it is sending. I know it is sending some config to the printer (Print Width for example) but I can't figure out what it could be sending to change the positioning for just the QRCode.
This is the label from our app when the label printer is first turned on
And this is label from our app, after the other app has printed a label and changed some settings.
The QR Code moved up and to the right, but everything else stayed in the same place.
This is some example ZPL for one of our labels
^XA
^PW420
^LS0
^LH0,0
^CF0,40^FO20,25^FDUnknown Vendor^FS
^FO15,0^BQN,2,6^FD##hCsck00000000000779/221a1^FS
^CFR,15^FO55,220^FD3877^FS
^CFR,15^FO180,70^FDTue 07:30 Nov 10^FS
^FO180,100^FDU. Surgeon^FS
^FO180,130^FDTotal hip^FS
^FO180,160^FDsigma^FS
^FO180,190^FDHip tool^FS
^FO180,220^FD1 of 2^FS
^XZ
^BY (Bar Code Field Default) is the only command that can affect all barcodes. However it shouldn't affect field origin, but you may want to test this.
Your best bet is to print a config label before and after and look for the difference. Also, it's good practice to create a 'config' format and send as needed. In your case where you are sharing the printer among different applications you should send the config each time you print.
We have many Zebra printers across our manufacturing site, and we send all of the config data each time we print a label.
If you have an Ethernet enabled printer you should also be able to type the IP address into IE and view the printer config information from your web browser.
Regards,
For some more info on Brians answer, in case anyone comes up against this. The ^BY field does affect QRCodes on the GK420t printer.
The other vendor was setting the barcode defaults
^BY2,2,59
And that was moving the QR Code down by 59. I've tested it on another model which didn't have the same issue so I think it's a bug.
If you are in 600 dpi Subst ^FO15,0 with ^FO15,050
015,050 is the position of qr code inside your label.
Try putting ^LH0,0 right after ^XA. That fixed mine.
I print a text using ZPL but they are printed incorrectly. It has gaps in the middle. They are printed correctly to the real printer via the ZebraDesigner. But they are wrong when printing via ZPL:
^FT246,70^A0R,16,16
^FB900,2,,
^FDMaisstaerke, Austernuce, Cashewnuss,Pilz, Mais, Lattich, Pack Choi,Sojasprossen^FS
It is printed as 'Maisstaerke, Austernuce, Cashewnuss,Pilz, Mais, Lattich, Pack Choi, Sojasprossen'
(there is a big gap after 'Mais,').
http://screencast.com/t/sTiaxC3cMg
http://screencast.com/t/0QkypnsPyF89
Please help.
Thanks
I'm unable to reproduce the issue, but the field block width seems rather large; you didn't specify any label dimensions in the original post. If you use the following code--a combination from the original post and your comments:
^XA
^PW560
^LL560
^LS0
^FO246,70^GB28,300,,^FS
^FT246,70^A0R,16,16 ^FB300,2,, ^FDMaisstaerke, Austernuce, Cashewnuss,Pilz, Mais, Lattich, Pack Choi,Sojasprossen^FS
^PQ1,0,1,Y
^XZ
I can reproduce what is possibly the issue--the field block automatic word wrapping--by reducing the field block width to 300 dots.
I also drew a box around the block for visualization. You can test in on the Labelary Viewer.
Finally, if you're somehow composing the data make sure there are no special (non printable, such as tab, non-UTF-8 or accented) characters in it, and if so, you will have to pre-escape them.
I need to print an image that is being returned to me through a web service (the data is returned as RAW) and I cannot for the life of me figure out how to print a graphic to a label with EPL.
The EPL manual defines the Graphic Write instruction as:
GWp1, p2, p3, p4, DATA
All of the parameters are returned to me, so I don't have to worry about calculating the height, width, etc., but my problem is that I don't know how to format the DATA.
The manual says DATA should be
Raw binary data without graphic file formatting. Data must be in bytes.
I've tried passing a binary string and a hex string, but nothing seems to work. There is no example on how to use this command in the EPL manual and after hours of searching online I have not been able to find a single example of how to use the command (i.e. example EPL commands that I can copy & paste to send to the printer).
Does anyone have an idea of how to use this command? Could you provide me with an example? (by example I don't mean a framework, code, etc., what I mean is just the plain EPL commands).
I can confirm that the data is in raw, uncompressed binary. It is also inverted-- that is, the 0 bits print as black, at least on my UPS-firmware LP-2844. I have no idea why all the examples from Zebra show the data as encoded into a hex representation.
It's worth noting that most print servers (HP Jetdirect, Lantronix LPS1-T, and almost certainly the Zebra built-in and external print servers) will form a binary connection to the printer if you spit data at them on port 9100 (using netcat for example):
nc printer_hostname_or_ip_address 9100 < test_file.txt
You get no feedback from the printer, except for the label having printed or not.
It takes my LP-2844 (UPS Firmware) printer about 5-6 seconds to print a label containing a 816 wide x 1218 tall downloaded bitmap onto a 4" wide x 6" tall label. It seems to be all imaging time: sending three labels at once is not any faster, and the network connection (through a Lantronix LPS1-T) is held open until the final label prints. That image is at the native resolution of the printer (203 dots/inch), and there is no dithering or resizing going on (I don't think EPL2 even knows how to dither or resize).
It might be possible to speed up the imaging time by optimizing the label into many smaller bitmaps (and horizontal and vertical line segments, and perhaps filled-in rectangular blocks). This wouldn't be a very hard optimization because the image is a single-bit black and white bitmap, and the code would be fairly simple. I don't know if it would really speed it up, though.
A more modern Zebra GX420 running ZPL with a built-in ethernet port ($500 online) can print the same label (with essentially the same graphic download encoding) in 1-2 seconds.
By the way, since I haven't yet actually answered the question, the raw EPL code for this is:
(a blank line)
N
q816
Q1218,20
GW10,10,102,1218,(124236 bytes of inverted bitmap data)
P
all the newlines are 0x0a (unix-style).
Maybe this will help, it has examples (and corrects an error in the manual). Also, it may be easier to use the GM command instead and just delete the image each time (see here for a stackexhange related question).
That being said, I've never gotten my Eltrons to successfully print an image (but my jobs don't require it).
Good luck!!
EDIT: Here's another link with example Perl code. They're aiming for Chinese characters but show how to print the Great Wave image (which oddly is Japanese).
I found that it is not possible to send a graphic to a Zebra printer with EPL using ASCII characters. The data must actually be sent as RAW data. So, for example, you can't send a graphic to the printer using Zebra Setup Utilities, or through any other means that cannot write RAW data from a file directly through the printer.
The only way around this I've found is to create the label as an image and send that image to the printer via a print command within your application.