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.
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).