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.

  • 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