Stripy Horse
Stripy Horse

← All guides

Zebra label prints cut off (only half the label appears)

The label comes out, the left side looks right, and the rest is missing. Or the top prints and the bottom is gone. No error, no warning: a Zebra clips silently and moves on.

Three causes, and one of them is physics rather than configuration.

Cause 1: your design is wider than the printhead

This is the one people spend longest on, because nothing is broken. A printhead has a fixed physical width and cannot print past it, whatever the ZPL says.

Ask the printer what it is:

(printf '~HI'; sleep 2) | nc 192.168.1.157 9100
GX430t-300dpi,V56.17.11Z,12,2104KB

The third field, 12, is dots per millimetre. This is a 4-inch printer, so:

4 in × 25.4 mm/in × 12 dots/mm = 1219 dots

1219 dots is the hard ceiling. ^PW1400 does not widen the head, and any ^FO beyond 1219 prints nothing at all. At 8 dpmm (203 dpi) the same 4-inch head gives you 812 dots, which is why a design that works on one printer clips on another of the same physical size.

Work out your own number the same way: dpmm from ~HI, multiplied by the head width in millimetres.

Cause 2: ^PW is set narrower than your design

If the head is wide enough and content still disappears at the right edge, the printer has been told to use less of it. ^PW sets the print width in dots, and it persists in the printer's configuration between jobs, so one bad job can leave every later job clipped.

Set it explicitly at the top of every format rather than relying on what the last job left behind:

^XA
^PW1219
^LL1829
^FO50,50^A0N,45,45^FDHello^FS
^XZ

Being explicit costs two lines and removes a whole class of "it worked yesterday".

Cause 3: ^LL is shorter than your content

^LL is the label length in dots. Content below it is on the next label, or nowhere. ~HS reports the length the printer is currently using, as the fourth field of the first line:

(printf '~HS'; sleep 2) | nc 192.168.1.157 9100
030,0,0,1824,002,0,0,0,000,0,0,0
001,0,0,0,1,2,6,0,00000000,1,000
1234,0

1824 dots at 12 dpmm is 152 mm, a correct 6-inch label. If that number is much smaller than your stock, the printer is either mis-calibrated or has been told a length that does not match the media, and everything past it is being cut.

Run a media calibration (~JC, then feed a few labels) if the number disagrees with the physical label in front of you.

Cause 4: you are trying to print 6x4 on a 4-inch printer

Worth its own heading because no setting fixes it and people lose hours here.

A 6x4 label is 6 inches across. Your printhead is 4 inches across. Those are incompatible, and no ^PW value changes it.

What you actually want is the same label rotated, printed 4 inches wide and 6 inches down the feed:

^XA
^PW1219
^LL1829
^FWR          ; rotate the whole format 90 degrees
^FO50,50^A0N,45,45^FDHello^FS
^XZ

^FWR rotates every field that follows, so a design authored landscape prints correctly on portrait stock. Per-field, ^FO50,50^A0R,... does the same for one field.

The mental model that keeps this straight: width is limited by the head, length is limited only by the media roll. Anything too wide has to become long.

Check the ZPL before the printer

All four causes are visible without printing anything. Paste the format into the ZPL viewer at the same size and density as your printer: if it clips there, the problem is your ZPL and no amount of printer configuration will fix it. If it renders whole there and clips on paper, the printer's ^PW, ^LL or calibration is the difference.

A virtual printer takes it one step further and accepts the stream over raw 9100, so you can compare what your application actually sent against what you meant to send.

The right edge is cut by a few millimetres only

That is usually the head width being marginally less than the media width, which is normal: label stock is often slightly wider than the printable area. Move the design in with a larger ^FO x-origin rather than trying to reclaim the edge.

It prints fine from the vendor's tool but clips from my app

The vendor tool is sending its own ^PW and ^LL. Yours is inheriting whatever was left in the printer. Set both explicitly and the difference goes away.

Half a label, then a blank one

That is the content overflowing ^LL onto a second label rather than being dropped. Same fix: raise ^LL, or shorten the design.

Stripy Horse is the developer platform for Zebra printing: convert PDFs and images, design labels in HTML, preview ZPL pixel-true, and test against virtual printers in CI. Get in touch or try the free tools.

Published 2026-09-03 · Ben Faerber, software engineer, five years building warehouse fulfillment and label-printing systems; maintainer of pdf-to-zpl (27,000+ installs powering production label generation).