~DS - Download Scalable Font
Downloads a scalable Zebra font.
~DS downloads an Intellifont, the outline format Zebra used before TrueType, so
that text scales smoothly rather than magnifies in whole multiples like a
bitmapped font. Zebra's ZTools converter writes the command and its payload. The
guide is blunt about a change to either. The printer does not check a downloaded
scalable font for integrity, and a corrupt font gives unpredictable results.
Syntax
~DSd:o.x,s,dataSupport
Recognised as valid ZPL and not implemented, with no plan to.
Labelary does not support it either. Fields with the downloaded font default to a built-in font. — not pinned by a test
Labelary does not implement it either, so there is no parity reference.
Parameters
d:o.xFont fileoptional · textWhere to store the font: device R:, E:, B: or A:, a name of up to eight characters, and the fixed extension .FNT.
- Default
- R:UNKNOWN.FNT
- Invalid value
- discarded, and the default applies
- Test coverage
- The invalid-value rule is not pinned by a test.
sFont sizerequired · integerSize of the font data in bytes, as the conversion tool writes it. The guide says not to edit it.
- Invalid value
- enough to make the whole command be ignored
- Test coverage
- The invalid-value rule is not pinned by a test.
dataFont datarequired · hexadecimalThe font itself, as ASCII hexadecimal.
- Invalid value
- enough to make the whole command be ignored
- Test coverage
- The invalid-value rule is not pinned by a test.
Behavior
~DS acts on receipt and belongs outside ^XA … ^XZ. It prints nothing. The
printer stores the font under the given path, in volatile memory by default. A
power cycle then needs the font again, unless it went to flash or a card.
The converter writes the size, and it must match the payload. The payload is the
converted font as hexadecimal, so these commands run to tens of thousands of
characters. The guide's example is a 37,080-byte CGTIMES.FNT.
After storage, ^CW binds the font to a letter that ^A and ^CF can name, or
^A@ names it directly. The font is scalable, so it takes the height and width
from ^A as dots rather than as a magnification factor.
New work must use ~DU with a TrueType file instead. The renderer implements
neither command, so a field that names the font defaults to a built-in one, and
its metrics and line breaks differ from the intended typeface.
Differences from the specification
Labelary against the ZPL II guide
Where Labelary — our compatibility target — behaves differently from the printed specification.
- Labelary's table marks
~DSunsupported. — not pinned by a test
zpl.tools against Labelary
Where our output differs from Labelary for the same input. These are the differences that break a migration.
- Both engines ignore the download and report it on the same bytes, in a different sentence. Labelary says
This ZPL command is not implemented and was ignored; the report here says the command is valid ZPL the renderer does not support yet (measured 2026-08-21). The wording is the renderer's one message for every command it recognizes and does not act on, so~DTreads the same way. — pinned bytest_example_ds_scalable_font_download
Example
The download, then a field asking for the font through a ^CW alias:
~DSR:CGTIMES.FNT,37080,00FF00FF00FF00FF
^XA
^CWM,R:CGTIMES.FNT
^FO50,50^AMN,40,40^FDDownloaded font, or a fallback^FS
^XZ
Related commands
~DBDownload Bitmap FontDownloads a Zebra bitmapped font.~DTDownload TrueType FontDownloads a TrueType font.~DUDownload Unbounded TrueType FontDownloads a TrueType font with a full, unrestricted character set.^CWFont IdentifierAssigns a downloaded font to one of the single-letter font slots.