zpl.tools
Bar codes

^BO - Aztec Bar Code

Two-dimensional symbology with no quiet-zone requirement, common on transport tickets.

^BO prints an Aztec symbol: square modules around a central bulls-eye finder pattern. The central finder makes a quiet zone unnecessary, so the symbol fits on transport tickets and boarding passes where every millimeter is committed. Choose ^BO over ^BQ QR Code where the space around the symbol is not available to reserve.

Syntax

^BOo,m,x,d,r,s,i

Alias: ^B0, which the printer treats as the same command.

Support

Supportedparsed: full · state: full · rendered: full

Every documented parameter renders the same output Labelary produces.

Labelary renders this command.

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
mMagnificationoptional · integer

Module size in dots.

Default
a value chosen from the print density
Accepted range
1 to 10
Invalid value
clamped to the nearest allowed value. Labelary accepts a value below 1 silently, and clamps a value above 10 to 10 (measured 2026-07-12). The renderer accepts the value as written.
Test coverage
Bounds pinned: maximum (10), above the maximum (11). No test at the minimum. The invalid-value rule is not pinned by a test.
xExtended channel interpretationoptional · Y or Nnot honoured by zpl.tools

Whether the field data uses ECI escapes to switch character sets.

Default
N
Invalid value
discarded, and the default applies. An invalid flag is reported and the default of N applies. ECI switching is not implemented.
Test coverage
No documented value is exercised by a test (Y, N). The invalid-value rule is pinned by 2 tests.
Y
Data contains ECI escapes
N
No ECI (default)
dError control and symbol sizeoptional · integer

Either a fixed symbol size or a minimum error-correction percentage. 1-99 gives a percentage. 101-104 gives a compact symbol. 201-232 gives a full-range symbol. 300 gives an Aztec rune.

Default
sized to fit the data
Accepted range
1 to 300
Invalid value
not documented, and we have not measured it. The accepted values are four disjoint bands rather than one range, and no measurement covers a value between the bands.
Test coverage
No test at the minimum, maximum or one step outside the range.
rReader initialisationoptional · Y or Nnot honoured by zpl.tools

Marks the symbol as a reader-programming symbol rather than data. The guide calls this the menu symbol indicator.

Default
N
Invalid value
discarded, and the default applies. The parser reads this argument at the wrong position today.
Test coverage
Values exercised: Y, N. The invalid-value rule is pinned by 2 tests, including the diagnostic it emits.
Y
Reader initialization symbol
N
Ordinary data (default)
sSymbols in the sequenceoptional · integer

How many symbols a structured-append sequence spans.

Default
1
Accepted range
1 to 26
Invalid value
discarded, and the default applies. The renderer reports a value outside 1-26 and resets it to 1, in both directions (measured against Labelary 2026-07-12).
Test coverage
Bounds pinned: minimum (1), below the minimum (0), above the maximum (27). No test at the maximum. The invalid-value rule is not pinned by a test.
iMessage IDoptional · text

Correlates the symbols of a structured-append sequence.

Default
no message ID
Invalid value
not possible — any value is accepted. Any string is accepted. An id containing a space is dropped from the structured-append prefix, since the space is the decoder's delimiter.
Test coverage

Behavior

The fourth argument sets either the error correction or the symbol size, according to its value band:

  • 1 to 99 — a minimum error-correction percentage. The encoder sizes the symbol to fit.
  • 101 to 104 — a compact symbol of one to four layers.
  • 201 to 232 — a full-range symbol of one to 32 layers.
  • 300 — an Aztec rune, the small fixed symbol that encodes a single byte.

Leave the argument at 0 for the default correction level and automatic sizing.

The reader-initialization argument — the menu symbol indicator in the guide — marks the symbol as scanner configuration and not as data. Do not set it on a label that a scanner must read normally.

Structured append splits one message across up to 26 symbols. The message ID correlates them, and the guide limits the ID to 24 characters. Both arguments mean nothing for a single symbol.

^BY has no effect on the symbol. Magnification is the module width in dots and the only size control.

The renderer parses ^BO and draws no symbol. It reports a diagnostic and does not default to a text run. A parsing gap goes with that state: the parser does not read the third argument, the ECI flag, so every argument after magnification lands one position early. The renderer release fixes both gaps. Until then ^BQ QR Code is the closest 2D symbology that renders, and it needs a quiet zone.

The ^B0 spelling, with a zero, is an accepted alias, and it appears in the guide's own example.

Known issues

Tested behavior

Differences from the specification

zpl.tools against the ZPL II guide

Where our renderer behaves differently from the specification.

  • The guide takes the default orientation from ^FW. The renderer applies ^FW to text fields only. A barcode after ^FWR prints unrotated unless its own o argument rotates it. — not pinned by a test

Example

Default error correction and automatic sizing, at a 5-dot module:

^XA
^FO50,50
^BON,5,N,0,N,1,
^FDAztec 1234567890^FS
^XZ

Open in viewer

  • ^BQ QR Code Bar CodeThe common two-dimensional matrix symbology. A prefix on the field data sets its error correction and input mode. The command does not set them.
  • ^BX Data Matrix Bar CodeCompact two-dimensional symbology used for small-part marking and GS1 DataMatrix.
  • ^FD Field DataSupplies the text or barcode content of the field.
  • ^FO Field OriginSets the top-left corner of the next field.