Zebra Programming Language (ZPL) II using ^FB or ^TB truncates text at specific lenghts
Asked Answered
M

1

7

I am writing code to print labels for botanic gardens. Each label is printed individually but with different information on each label. Each label contains a scientific name which can vary greatly in size and thus can go over 2 lines (our label size is 10cm wide by 2.5cm high). Our problem occurs mainly with the name when we go over 24 characters (See line with **). If we choose a name that has 24 characters or less then it prints fine. Anything more it will not print. If we take all the other "items" off the label and just leave the "name" element then it prints only the first 24 characters and truncates the rest (we did this to test whether a possible overlap between our ^FB block and another element could be causing this problem). We tried this with other elements that use a ^FB and we found that they displayed the same behaviour but varied in the length at which this issue occurred: for example "cc" (short for country code) had a limit of 21 characters.

For added information: we compile this code within a BASIC environment and use variables such as ":name:", ":Acc.dt":" as seen bellow. Our database provides this information and we have checked for any internal routines that would have truncated long names etc. Our code was working fine in ZPL but we recently had to move to ZPL II (we purchased a newer model GX430t) and had to modify our ZPL code at which point this problem started to occur.

Here is our code:

^XA
^LH40,40
^MMT
^PW1200
^LL1200
^FO16,05^A0N,35,^FDAcc. num.^FS
^FO170,05^A0,35,^FV":accnum:"^FS
^FO360,05^A0,35,^FV":qual:"^FS
^FO350,35^A0N,30,^FDAcc.dt.^FS
^FO450,35^A0N,30,^FB790,3,0,L,
^FH\^FV":accdt:"^FS
^FO430,70^^A0N,25,^FB790,3,0,L,
^FH\^FDProv. type^FS
^FO560,70^A0N,25,^FV":provtype:"^FS
^FO800,225^A0N,30,^FB790,3,0,L,
^FV":cc:"^FS
**^FO10,100^A0N,40,^FB790,3,0,L,
^FV":name:"^FS**
^FO1000,05^A0,35,^FV":proptype:"^FS
^FO5,225^A0,25^FVColl.^FS 
^FO55,225^A0,25^FV":coll:"^FS
^FO375,225^A0,25,^FV":consstat:"^FS
^FO1000,70^A0,25,^FV":reqby:"^FS
^FO535,180^BCN,55,N,N,N^FV":qual:"^FS
^FO60,45^BCN,35,N,N,N^FV":accnum:"^FS
^PQ1,0,1,Y
^XZ

Here is what we have tried to fix this (apologies if some seem like wild cards):

  1. Changing font type, size, and location on label;
  2. Changing ^FO to ^FT;
  3. Looked at our internal database logic;
  4. Taking away ^FH\;
  5. Changing the values within the ^FB line (we tried nearly all possible permutations);
  6. Manually typed in a name longer than 24 characters (using notepad - no database/compiler) - same issue.

Any thoughts on this would be greatly appreciated Kerry

Menzies answered 29/8, 2013 at 13:48 Comment(1)
How can we write a text in bold in zpl?Quorum
R
7

I've had this issue before, and across printer manufacturers, firmwares and languages.

First, some paraphrased explanations straight out of the 2014 ZPL II Programming Guide (P1012728-009 Rev. A).

"The ^TB command prints a text block with defined width and height. The text block has an automatic word-wrap function. If the text exceeds the block height, the text is truncated."

"The ^FB (Field Block) command allows you to print text into a defined block type format. It can format a ^FD (Field Data) string into a block of text using the origin, font, and rotation specified for the text string, and it contains an automatic word-wrap function."

Technically, the difference between a text block and a field block is that height is in dots for the former and in lines for the latter.

Also notice that although not mentioned, the ^FB command also truncates text that does not fit in the number of lines specified, and here's where the font size of the A0 command and the line spacing of the FB command now play an important role in determining whether to show or truncate that second or third line.

Incidentally, in other languages such as TSPL there is no truncation of text blocks--if you tell the block to be 3 lines in height but there's enough text for 4 lines, line 4 overlaps line 3 to indicate this--which may seem awful, but it is better than the data loss of truncation, which is not obvious.

For both commands:

  • "Using ^FT (Field Typeset) for your data takes the baseline origin of the last possible line of text, meaning that the field block will be filled from bottom to top."
  • "Using ^FO (Field Origin) means that the field block will be filled from top to bottom."

In reality, I have only been able to make the ^FB command work as expected, but that may be because ^TB is not implemented in the firmware I've worked with (ZPL II "compliant" Bluetooth printers).

You can test the following snippet for a 2x2 label in the Labelary Viewer:

^XA
    ~TA0
    ^MTD
    ^MNW
    ^MMT
    ^MFN
    ~SD15
    ^PR6
    ^PON
    ^PMN
    ^PW406
    ^LS0
    ^LRN
    ^LL406
    ^LT0
    ^LH0,0
    ^CI0
^XZ
^XA
    ^FO324,10,0^FB386,2,0,C,0^A0R,36,28.8^FH^FD"The King" Cupcake^FS
    ^FO278,10,0^FB386,1,0,C,0^A0R,28,22.4^FH^FDUse By 11/24/2015 02:45 PM^FS
    ^FO152,10,0^FB386,1,0,C,0^A0R,24,19.2^FH^FD11/24/2015 02:45 PM^FS
    ^FO62,140,0^FB250,1,0,R,0^A0R,24,19.2^FH^FDSL: 4 hours^FS
    ^FO38,10,0^FB386,1,0,L,0^A0R,18,14.4^FH^FDPREP DATE:^FS
    ^FO8,10,0^FB386,1,0,L,0^A0R,28,22.4^FH^FD11/24/2015 10:45 AM^FS
    ^FO62,10,0^FB50,1,0,L,0^A0R,24,19.2^FH^FDEMP:^FS
    ^FO92,10,0^FB376,3,0,J,0^A0R,18,14.4^FH^FDIngredients: 1 1/2 cups all-purpose flour, 1 teaspoon baking powder, 1/2 teaspoon salt, 8 tablespoons (1 stick) unsalted butter, room temperature, 1 cup sugar, 3 large eggs, 1 1/2 teaspoons pure vanilla extract, 3/4 cup milk.^FS
    ^PQ3,,,Y
^XZ

In particular, I've preceeded the A0 and FD commands with FB. Using the viewer, you can quickly test the effects of changing from FT and FO in the ingredients line, the effects of changing the A0 font sizes and the effects of changing the FB number of lines from say 3 to 2 (the viewer does not truncate text btw).

Of course there is no match for actually printing a label, for your ZPL II "compliant" printer may or may not truncate text according to its manufacturer and firmware version.

I hope that helps!

Raine answered 19/7, 2016 at 17:18 Comment(6)
how can we write a text in bold in zpl??Quorum
Bold and italic text takes downloading a different font and then selecting it.Raine
can you please give me an example of code or refer to any link so that i get help from itQuorum
and what about text color ? can we changed text color in red or blue or any other color??Quorum
The ~DB and ~DS commands allow you to download bitmap and scalable fonts; the ^A@ command allows selecting font by names. Check out zebra.com/content/dam/zebra/manuals/en-us/software/…. For color, you need to use a color capable thermal printer and check the language reference, it will hopefully have a flavor of ZPL with commands to select colors or brushes.Raine
I just spent an inordinate amount of time trying to figure out why my TB was truncating while using the "ZPL Printer" Chrome plug-in. When I removed characters from ZPL commands above the offending line, my TB would become one character less truncated for each character removed above. Just for kicks, I sent the job to the GX430T and everything printed correctly. Point is, as useful as this emulator is, it can't be completely trusted (unfortunately). I describe another issue in one of my other posts.Aristippus

© 2022 - 2024 — McMap. All rights reserved.