Sign In
Products
ZPL ViewerBarcode GeneratorImage → ZPLZPL cheat sheetLabel DesignerTemplate Gallery
Developers
API QuickstartAPI ReferenceMCP ServerBulk GenerationWebhooksSDKs & ExamplesLimitsDirectPrint agent NewGitHub ActionVS Code extensionOn-Premise
Solutions
Logistics & ShippingE-CommerceERP & WMSManufacturingRetailHealthcare & LaboratoryAll solutions
Tools
ZPL Diagnostics HubZPL DebuggerSize & DPI AnalyzerDPI ConverterBarcode fit calculatorShipping Label AnalyzerFont InspectorOrientation DebuggerCalibration AssistantPrinter Compatibility CheckerBarcode Readability CheckerPrinter Language DetectorThermal Printer Test PackZPL ToolsEPL ToolsTSPL ToolsCPCL ToolsPrinter Language ConverterAll ToolsGuidesPricing
Language
EnglishTürkçeDeutsch
Home›Guides›ZPL troubleshooting by symptom

ZPL troubleshooting by symptom

Published: · Updated:

Paste your code

Paste code or load the sample — the result appears below, with the line and severity of each finding.

Result

Health report

Thermal label problems are diagnosed backwards: you see the physical output, then work back to the line of ZPL that caused it. This page is the triage step — match what the printer actually did, get the usual cause, then follow the check that confirms it. Every symptom below links to a full walkthrough.

Start from the file, not the printer

The instinct is to change a printer setting, print again, and see. That costs labels and hides the cause: a setting change can mask a file problem for one job and let it come back on the next printer. The ZPL is text you can read, and most failures are visible in it — declared size, coordinates, field terminators, orientation letters. Read the file first; touch the printer only when the file is proven clean.

Symptom → likely cause

What you seeUsual causeWalkthrough
Everything printed, but far too small on the media The file was written in dots for one resolution and sent to a printer with a different one (203 vs 300 dpi) Label prints too small
The right edge or the bottom is missing Content extends past ^PW/^LL, or the media is narrower than the file assumes Label cut off
A line of text runs past the edge, or wrapped lines print on top of each other The field has no ^FB, so nothing wraps; or its ^FB allows fewer lines than the text needs and the overflow overprints the last line Text runs off the label
The barcode prints but no scanner reads it Module width too small for the resolution, missing quiet zone, or data the symbology cannot encode Barcode not scanning
The whole label is rotated 180°, or one field lies sideways Three separate switches rotate things: ^PO (whole label), ^FW (all following fields), the orientation letter in ^A (one field) Prints upside down
Accented or non-English characters print as garbage Encoding mismatch — the file is UTF-8 but the printer was not told so (^CI28), or the font has no glyph for the character Special characters not printing
An extra blank label feeds after every real one The declared label length does not match the media, or the job carries a ^PQ nobody intended Extra blank label
The layout is right but everything sits at an offset A global shift is in play: ^LH, ^LS or ^LT — or ^FT is being read as if it were ^FO Content shifted
The label comes out completely blank Structural: unbalanced ^XA/^XZ, a broken ^FS chain swallowing later commands, or data with no position Prints blank
Several graphics in the format, only the last one prints A mobile printer running ZPL through an emulation layer — the format itself is usually valid Only last graphic
Raw text and control characters instead of a label Dump mode tripped during a feed-button sequence — or ZPL sent to an EPL-generation printer Prints gibberish
The printer suddenly asks for ribbon, media handling changes between jobs The format carries ^MT and the printer obeys job-side configuration Media type from the format
Status queries (~HS) take an age or never return Five printer states answer with silence; a query behind an open connection waits Slow or silent status
Ping answers, nothing reaches port 9100 ICMP passes but the raw service is off, filtered or held by another connection Ping works, 9100 does not
Dots all over areas that should be white A dithered bitmap in the file — or darkness, dirt and wear at the printhead Dots in white areas
Thermal transfer print faint, smudged or rubs off Ribbon type does not match the label material, or speed above the ribbon maximum Faded or smudged transfer print

What a preview can and cannot prove

A browser preview renders the same commands a printer would draw, so it settles a large class of questions without wasting media: whether the content fits the declared size, whether coordinates land where you think, whether a barcode's data is encodable, whether ^FW and the per-field ^A orientations do what you expect, and whether the command stream is structurally sound.

It cannot prove the physical layer. Print orientation applied inside the printer (^PO), top-of-form offset (^LT), media tracking and gap sensing, darkness and speed, ribbon and head condition, and RFID encoding all happen after the image is composed. A preview that looks perfect narrows the problem to that layer — which is useful information, not a failure.

The preview is right but the paper is wrong: a checklist

"It looks fine in the viewer and prints blank (or rotated, or tiny)" is one of the most common questions about ZPL. Work down this list in order — each step rules out one layer between the file and the head:

  1. Does the preview use the printer's density? A file written for 203 dpi looks correct at 8 dpmm and prints at two-thirds size on a 300 dpi head — see label prints too small.
  2. Does the job reach the printer raw? A Windows or CUPS driver can rasterise, scale, rotate or wrap the job; ERP and shipping systems that print through a driver are the usual source of rotated carrier labels — see printing ZPL without a driver.
  3. Is the printer interpreting ZPL at all? In dump (diagnostic) mode it prints the received commands as text, and an EPL-only printer turns ZPL into garbled output — see printer prints gibberish.
  4. Are settings stored in the printer overriding the file? Orientation (^PO), top offset (^LT), label shift (^LS) and print width can be saved in the printer's configuration (^JUS); a saved value applies to every job that does not set it itself — see label prints upside down and content shifted.
  5. Is the media sensed correctly? Blank or skipped labels with a correct preview point at gap/mark sensing and calibration — see extra blank label.
  6. Did it go to the printer you think? A queue or IP that now points at a different device produces "nothing happened" — see label printed on the wrong printer.

Three checks that catch most of it

  1. Does the file declare its size, and does that match the media? ^PW and ^LL are in dots, not inches or millimetres. A 4-inch label is 812 dots at 203 dpi and 1218 at 300 dpi.
  2. Is every field closed? A missing ^FS makes the following commands part of the previous field's data, so they vanish from the output instead of erroring.
  3. Is anything shifting or rotating globally? Search the file for ^LH, ^LS, ^LT, ^PO and ^FW before you inspect individual fields — one of them explains most "everything moved" reports.

Paste a label into the ZPL viewer to run the structural checks and see the rendered result in one step.

Frequently asked questions

Where do I start when a ZPL label prints wrong?

Start from the file, not the printer. Declared size (^PW/^LL), coordinates, the ^FS chain and orientation letters are all readable text, and most failures are visible there. Changing a printer setting can mask a file problem for one job and let it return on the next printer.

Can a browser preview prove why my label prints wrong?

It settles the composition layer: whether content fits the declared size, whether coordinates land where you expect, whether barcode data is encodable, and whether the command stream is structurally sound. It cannot prove the physical layer — ^PO print orientation, ^LT top offset, media tracking, darkness, ribbon and head condition all happen after the image is composed.

What are the fastest checks on a broken ZPL label?

Three: does the file declare a size that matches the media (^PW/^LL are in dots — 812 at 203 dpi for 4 inches, 1218 at 300 dpi); is every field closed with ^FS; and is anything shifting or rotating globally (^LH, ^LS, ^LT, ^PO, ^FW).

Related guides

Why does my ZPL label print incorrectly?

The five failures behind most wrong ZPL labels: density mismatch, a missing ^FS, silent clipping, missing label dimensions and broken characters.

Every label in the job prints the same time (^FC, ^SL)

A multi-label ZPL job stamps every label with the same clock value. That is ^SL's documented default, not a bug — and ^SLT changes it.

Zebra label prints too small

A 4x6 label printing at two-thirds size in the top-left corner is a 203-to-300 DPI mismatch. Confirm it, see why ^MU rarely helps, rescale the file.

The printer prints gibberish

Raw text and control characters instead of a label point to dump mode; truly scrambled glyphs point to a language mismatch. Telling them apart takes a minute.

Try your own ZPL code →