Zebra label prints sideways? Rotation, ^PO, and the printhead
A label that prints sideways, upside down, or half-missing is almost always one of three different problems wearing the same costume. They have three different fixes, so the fastest route is telling them apart first.
| What you see | What it is | Fix |
|---|---|---|
| Whole label rotated 180°, otherwise fine | Print orientation (^PO) |
1 |
| Label rotated 90°, content clipped at one edge | Design wider than the printhead | 3 |
| Some fields sideways, others fine | Per-field rotation in the ZPL | 2 |
| Everything fine in preview, sideways on paper | Printer default orientation | 1 |
1. Print orientation: ^PO
^POI inverts the whole label (180°); ^PON is normal. It can hide in the job
or in the printer's saved defaults — which is why the same ZPL prints fine on
one printer and upside down on its neighbor. Send ^PON explicitly in the format
and the neighbor's ghost setting stops mattering.
There is no ^PO for 90°. If the whole label is a quarter-turn off, that's not
orientation — keep reading.
2. Rotation baked into the fields
Every text and barcode command carries its own rotation: ^A0N is normal,
^A0R rotated 90°, ^A0I inverted, ^A0B 270°. Same letters on ^BC, ^BQ
and friends. A label where some things are sideways was authored that way —
usually by an exporter that rotated per-field instead of rotating the canvas.
Paste the ZPL into the viewer and render at exact size: what you see is what the printhead does, so you can find the offending fields before wasting stock.
3. The one that isn't software: printhead width
A 4-inch printer physically cannot print a 6-inch-wide design. At 203 dpi a 4-inch head is 812 dots across; a 6×4 landscape label needs 1218. No command fixes physics — the printer clips at dot 812 and the bottom half of your "wide" label is simply gone, which reads as "my label printed sideways and cut off."
The fix is to emit the design rotated 90° onto the feed you actually have: a 6×4 design prints perfectly as a 4×6 job with everything rotated. That's how every carrier does landscape labels on portrait stock.
- The label sizer measures your ZPL's real content bounds and tells you which sizes it fits — including rotated-only fits, marked ↻.
- The PDF → ZPL converter and the API's
rotationparameter handle the rotation for you during conversion:
STRIPY_HORSE_API_KEY=""
curl https://api.stripyhorse.io/v1/render \
-H "X-Api-Key: $STRIPY_HORSE_API_KEY" -H "Content-Type: application/json" \
-d '{"zpl": "^XA...^XZ", "preset": "4x6", "rotation": 90}'
The five-minute diagnosis
- Render the ZPL in the viewer at your real label size and
density. Correct in preview but wrong on paper → printer settings (
^PON, check the saved defaults). Wrong in preview too → it's in the ZPL. - Run the sizer. Content wider than your label → that's the printhead problem; use a rotated fit.
- Neither → per-field rotation; hunt the
R/I/Bsuffixes.
Sideways labels are annoying; sideways barcodes are expensive — a clipped barcode stops scanning long before it stops printing. The preflight tool grades every barcode on the label so the truck finds out never.
Published 2026-08-25 · Ben Faerber — software engineer, five years building warehouse fulfillment and label-printing systems; maintainer of pdf-to-zpl (26,000+ installs powering production label generation).