zpl.tools
Fonts and text

^A@ - Use Font Name to Call Font

Selects a downloaded or built-in font by file name rather than by letter.

^A@ does the same job as ^A: font, rotation and size for one field. It names the font as a file on a printer drive, not as a single letter. A downloaded TrueType face therefore needs none of the 36 letter slots. One difference from ^A matters: the printer remembers the file name, so a later ^A@ that omits it reuses the same font.

Syntax

^A@o,h,w,d:o.x

Support

Supportedparsed: full · state: full · rendered: full

Every documented parameter renders the same output Labelary produces.

^A@ resolves a path on Z: to the built-in font it names and draws the field in it, at the requested height, width and orientation. A path a ~DY font download occupies resolves too and reports nothing, as on Labelary, but the face is not drawn with: the field prints font A. A path this printer has no font for reports RESOURCE_MISSING and draws font A, which is what Labelary does. — not pinned by a test

Labelary renders this command. Scheduled for milestone 5.9.

Parameters

oOrientationoptional · one of a set

Rotation of the text.

Default
the orientation set by ^FW, or N
Invalid value
discarded, and the default applies
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
Normal (default)
R
Rotated 90° clockwise
I
Inverted 180°
B
Read from bottom up, 270°
hCharacter heightoptional · dots

Height of the character cell in dots. A scalable font takes the value directly; a bitmapped one rounds to the nearest multiple of its base height.

Default
the height set by ^CF, or the font's own base height
Invalid value
discarded, and the default applies. The guide states no range for ^A@, only that an unusable value defaults to the ^CF height or the base height.
Test coverage
Bounds pinned: past what the shape can hold (99999999999999999999). The invalid-value rule is not pinned by a test.
wCharacter widthoptional · dots

Width of the character cell in dots.

Default
the width set by ^CF, or the font's own base width
Invalid value
discarded, and the default applies. The guide states no range for ^A@.
Test coverage
The invalid-value rule is not pinned by a test.
d:o.xFont fileoptional · text

The font to use, as device, name and extension. The extension is .FNT for a Zebra bitmapped font and .TTF for TrueType. The accepted devices are R:, E:, B: and A:; R: is the default.

Default
the font last named by ^A@
Invalid value
discarded, and the default applies. A name that leads to no font reports RESOURCE_MISSING and draws font A. That fallback is font A unconditionally, and is **not** the ^CF font. We measured on 2026-08-21 that ^CF0,50,50 followed by ^A@N,50,50,R:NOPE.FNT draws font A. The same ^CF under an unrecognized ^A letter draws font 0 instead. An omitted name reuses the name the last ^A@ gave, and the name last given wins even when it led nowhere. The reported path is normalized, not echoed: it upper-cases, a missing device becomes R: and a missing extension becomes .FNT, so r:small.fnt and SMALL.FNT both report R:SMALL.FNT. The built-in fonts are files on Z:, which is why Z:0, Z:0.FNT and Z:GS.FNT all resolve.
Test coverage
The invalid-value rule is pinned by 1 test.

Behavior

The path comes last, after the size, and holds a device, a name and an extension. The devices are:

  • R: for volatile memory,
  • E: for flash,
  • B: for a memory card,
  • A: to search all of them.

.FNT names a Zebra bitmapped font, and .TTF names a TrueType one. The distinction matters for sizing: a printer magnifies a bitmapped font in whole multiples of its cell exactly as under ^A, and a TrueType face scales freely.

A name carries over once a field gives it. ^A@N,40,40,B:CYRI_UB.FNT and then ^A@N,25,25 prints the second field in the same font at the smaller size. Nothing clears the name; another file name replaces it.

A file that is not in memory does not suppress the field. The guide defaults to the font set by ^CF, or to font A where no ^CF precedes it. A format that relies on a font nobody downloaded therefore prints in the wrong typeface rather than fails visibly. A font needs a download first, and the renderer implements neither ~DT nor ~DU, so that default is what ^A@ gives here.

^A@ and ^CW are the two ways to reach a downloaded font, and they differ in scope. ^A@ names the file per field. ^CW binds the file to a letter once, so that ordinary ^A and ^CF commands can use it.

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.

  • A font path whose extension is outside FNT, TTF and TTE resolves as FNT on both sides. Labelary also reports which extension it substituted, as in File extension 'XYZ' cannot be used here, using 'FNT' instead; valid extensions are 'FNT', 'TTF', 'TTE', and we report nothing (measured 2026-08-22). — not pinned by a test
  • Z:E.FNT and Z:H.FNT resolve here and do not on Labelary. OCR-B and OCR-A are resident font files on a Zebra printer, and the guide's own font table lists both, so we resolve them. We measured on 2026-08-19 that Labelary answers File 'Z:E.FNT' does not exist for each. Every other built-in file agrees: Z: plus 0 A B D F G GS P Q R S T U V resolves on both, and Z:C.FNT, Z:I.FNT, Z:N.FNT and Z:1.FNT resolve on neither. — pinned by ocr_a_and_ocr_b_resolve_here_where_labelary_reports_them_missing

Example

A built-in font called by its path, then reused without repeating the name:

^XA
^FO50,40^A@N,40,40,Z:0.FNT^FDFont called by path^FS
^FO50,110^A@N,25,25^FDName carried over^FS
^XZ

Open in viewer