ZPL Fonts Overview

What ZPL fonts are, how bitmap and scalable fonts differ, and how to choose between them for your labels.

A ZPL font is the typeface the printer uses to turn the text in a ^FD field into dots on the label. ZPL II printers carry a small set of built-in fonts in firmware, and most Link-OS and many older models can also load TrueType fonts you supply.

Everything in ZPL is measured in dots, not points. One dot is one printhead element, so physical size depends on the printer’s resolution (see font sizes by DPI).

Bitmap vs scalable fonts

Bitmap fonts Scalable fonts
Built-in examples A, B, C, D, E, F, G, H 0 (zero), GS
Defined as A fixed grid of dots per character An outline that is rendered at any size
Allowed sizes Whole multiples (1x to 10x) of the base cell Any height and width from 10 to 32000 dots
Look when enlarged Blocky, because each dot is multiplied Smooth
Speed Very fast Slightly slower to render
Best for Tiny, crisp text; OCR-style text; legacy formats Headings, mixed sizes, anything that must look good

Downloaded TrueType and OpenType fonts behave like scalable fonts: you can set height and width freely.

How a font is chosen in ZPL

  1. ^A selects a font for one field.
  2. ^CF sets the default font used by any field that does not have its own ^A.
  3. ^CW gives a font a new letter alias, which is how you reach a downloaded font with a short ^A command.
^XA
^CF0,30
^FO40,40^FDUses the default font 0 at 30 dots^FS
^FO40,90^ADN,18,10^FDUses bitmap font D^FS
^XZ

Which one should I use?

  • Default choice: font 0. It is scalable, readable at small sizes and available on every ZPL printer.
  • Very small text (under about 2 mm tall): bitmap A or B, which are designed to stay legible.
  • Text a scanner or person must read as OCR: E (OCR-B style) or H (OCR-A style).
  • Special symbols such as registered or trademark signs: GS.
  • Brand fonts, accents or non-Latin scripts: download a TrueType font.
  • A font the printer cannot hold: convert text to an image with the text-to-graphic tool.

Next steps

What the printer is really doing with your text

It helps to picture the printhead as a very fine row of tiny heaters. Every character you print is ultimately a pattern of black and white dots laid down one thin line at a time as the label feeds past. A bitmap font stores that pattern ahead of time, so the printer just copies it into place. A scalable font stores outlines, and the printer has to work out which dots fall inside those outlines at the size you asked for.

That difference explains most of the behaviour people find odd. Bitmap fonts are quick and perfectly sharp at their native size, but they only come in chunky steps. Scalable fonts give you freedom, but at very small sizes the outline has to be rounded to whole dots, and thin strokes can break up. Neither is better in general. They suit different jobs.

Why the same code prints different sizes on different printers

If you take one label format and send it to a 203 DPI printer and then a 300 DPI printer, the text on the second one comes out noticeably smaller. Nothing is wrong with the printer. You told it to draw a character 40 dots tall, and 40 dots is a shorter distance when the dots are packed closer together. This catches almost everyone once, usually the day a second printer model joins the fleet. We cover the arithmetic on the font sizes by DPI page, and there is a size calculator if you’d rather not do it by hand.

Common beginner mistakes

Assuming every font has every character. The built-in fonts are built for Latin text. Ask them for a Chinese character or an Arabic letter and you’ll get a blank or a box. Language support is a separate topic, covered in language pages.

Forgetting that settings stick. Commands like ^CF and ^CI stay in force until something changes them. If one label sets a default font and the next label doesn’t, the second one quietly inherits the first one’s choice. When a label looks fine alone but wrong in a batch, this is a likely cause.

Mixing up font height and text height. The height in ^A is the height of the character cell, not of a capital letter. Capitals come out shorter than the number you typed. If you need a precise physical size, measure a test print rather than trusting the math alone.

Trying to use a PC font without sending it. Your laptop may have hundreds of fonts, but the printer knows nothing about them. A font has to be downloaded to the printer, or the text has to be turned into an image first.

A small experiment worth doing

Print the same sentence in font 0, font A, font D and font E, all at roughly the same height. It takes two minutes and teaches more than any table. You’ll see how narrow font A looks, how much more open E is, and how font 0 reads best at medium sizes. You can paste the example from the built-in font list into the live preview first to check your layout before spending a label.

Frequently asked questions

Do I need to learn every font? No. Most real labels use font 0 for nearly everything, a bitmap font for tiny text, and maybe an OCR font for one field.

Can I use my company’s brand font? Usually yes, as long as the license allows embedding and the printer has room. See downloading TrueType fonts and the notes on flash versus RAM so it survives a restart.

What if the font I need won’t load? Turn the text into a graphic with the text-to-graphic tool. It’s less elegant, but it prints exactly what you see.

Where do I go when something looks wrong? Start with the troubleshooting section. Blocks, wrong accents and clipped text each have their own page, and our blog has longer walk-throughs.

Last reviewed 2026-10-20