zpl.tools
Bar codes

^BT - TLC 39 Bar Code

Telecommunications composite symbol: a Code 39 symbol carrying an equipment identifier with a MicroPDF417 symbol beside it.

^BT prints a TLC39 symbol, the TCIF can-tag standard for telecommunications equipment labels. It is two bar codes in one field. A Code 39 symbol holds the six-digit ECI number, and a MicroPDF417 symbol beside it holds the serial number and everything after it. The two halves take their sizes separately, so the command has five sizing arguments and no data arguments.

Syntax

^BTo,w1,r1,h1,w2,h2

Support

Not implementedparsed: none · state: none · rendered: none

Recognised as valid ZPL and not implemented, with no plan to.

Labelary does not implement ^BT either. There is no compatibility target to match, and there is no plan to add one. A ^B3 field and a ^BF field together are the closest equivalent. — not pinned by a test

Labelary does not implement it either, so there is no parity reference.

Parameters

oBar code orientationoptional · one of a set

Rotation of the symbol and interpretation line.

Default
the orientation set by ^FW, which itself defaults to N
Invalid value
discarded, and the default applies. The renderer reports an unrecognized character as invalid, and uses the default.
Test coverage
No documented value is exercised by a test (N, R, I, B). The invalid-value rule is not pinned by a test.
N
No rotation (default)
R
Rotated 90° clockwise
I
Rotated 180°. The symbol reads upside down
B
Rotated 270° clockwise
w1Code 39 module widthoptional · dots

Narrow-element width of the Code 39 component.

Default
a value chosen from the print density
Accepted range
1 to 10 dots
Invalid value
not documented, and we have not measured it. Labelary does not implement ^BT, so no measurement target exists.
Test coverage
No test at the minimum, maximum or one step outside the range.
r1Code 39 wide-to-narrow ratiooptional · decimal

Ratio for the Code 39 component, in steps of 0.1.

Default
2
Accepted range
2 to 3
Invalid value
not documented, and we have not measured it. The renderer does not implement or measure this command.
Test coverage
No test at the minimum, maximum or one step outside the range.
h1Code 39 heightoptional · dots

Height of the Code 39 component.

Default
a value chosen from the print density
Accepted range
1 to 9999 dots
Invalid value
not documented, and we have not measured it. The renderer does not implement or measure this command.
Test coverage
No test at the minimum, maximum or one step outside the range.
w2MicroPDF417 module widthoptional · dots

Module width of the MicroPDF417 component.

Default
a value chosen from the print density
Accepted range
1 to 10 dots
Invalid value
not documented, and we have not measured it. The renderer does not implement or measure this command.
Test coverage
No test at the minimum, maximum or one step outside the range.
h2MicroPDF417 row heightoptional · dots

Row height of the MicroPDF417 component.

Default
a value chosen from the print density
Accepted range
1 to 255 dots
Invalid value
not documented, and we have not measured it. The renderer does not implement or measure this command.
Test coverage
No test at the minimum, maximum or one step outside the range.

Behavior

The field data holds the whole content, as up to three comma-separated parts:

  1. ECI number — exactly six digits, never padded. Without a following comma the printer prints the Code 39 symbol only, with no MicroPDF417 component. Six digits is a hard rule, and any other length is an invalid-character error.
  2. Serial number — up to 25 alphanumeric characters, no punctuation, variable length. This part goes into the MicroPDF417 symbol.
  3. Additional data — a country code, for example. Up to 150 bytes including the commas, in fields of at most 25 alphanumeric characters each, with a comma between them. The encoder appends it after the serial number inside the MicroPDF417 symbol.

The MicroPDF417 component is always four columns wide, and the firmware selects its mode from the amount of data. The guide advises every argument at its default, which gives a result compliant with the TCIF standard whatever the printhead density.

No command here renders this symbol. A ^B3 Code 39 field beside a ^BF MicroPDF417 field is the closest equivalent. ^BF does not render either, so only the Code 39 half is available today.

Tested behavior

Differences from the specification

zpl.tools against Labelary

Where our output differs from Labelary for the same input. These are the differences that break a migration.

  • Labelary does not draw a symbol either, but prints the field data on the label as an ordinary text run with no warning (measured 2026-07-30). The renderer draws nothing and reports a diagnostic, so a label that looks plausible on Labelary comes back empty. — not pinned by a test

Example

The guide's own example: an ECI number, a serial number and two additional fields, with every sizing argument left at its default:

^XA
^FO50,50
^BT
^FD123456,ABCd12345678901234,5551212,88899^FS
^XZ

Open in viewer

  • ^B3 Code 39 Bar CodeThe general-purpose alphanumeric symbology, readable by every scanner and the safest default for internal labeling.
  • ^BF MicroPDF417 Bar CodeCompact PDF417 variant for small labels, selected from a table of 34 fixed row-and-column layouts.
  • ^B7 PDF417 Bar CodeStacked two-dimensional symbology that holds several hundred bytes, used on driving licenses and shipping documents.