^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,h2Support
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 setRotation of the symbol and interpretation line.
- Default
- the orientation set by
^FW, which itself defaults toN - 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 · dotsNarrow-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 · decimalRatio 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 · dotsHeight 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 · dotsModule 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 · dotsRow 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:
- 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.
- Serial number — up to 25 alphanumeric characters, no punctuation, variable length. This part goes into the MicroPDF417 symbol.
- 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
Related commands
^B3Code 39 Bar CodeThe general-purpose alphanumeric symbology, readable by every scanner and the safest default for internal labeling.^BFMicroPDF417 Bar CodeCompact PDF417 variant for small labels, selected from a table of 34 fixed row-and-column layouts.^B7PDF417 Bar CodeStacked two-dimensional symbology that holds several hundred bytes, used on driving licenses and shipping documents.