Published:
A printer driver has one job: turning documents — pages from Word, a browser, a PDF — into the language a specific printer speaks. A ZPL file skips that step by definition: it already is the language the printer speaks, and the printer's own firmware does the rendering. For a ZPL workflow a driver adds nothing, and it can actively harm: a driver-backed queue treats your ZPL source as a document and prints the commands as visible text.
Most networked thermal printers accept raw commands on TCP port 9100. Anything that can open a socket can print — no print system, no installation. The commands for every OS, plus the "nothing prints" checklist, are in how to send ZPL to a network printer.
When several people or systems share a printer, a queue buys you
spooling, ordering and retries. On macOS and Linux that is CUPS with a
raw queue — one lpadmin line; the setup and the
macOS-specific corners are in
printing ZPL on macOS
and Linux.
Windows can pass bytes through, too. The common recipe: add a printer on a Standard TCP/IP Port (protocol RAW, port 9100) and pick the built-in Generic / Text Only driver — it does not try to render ZPL into graphics, so the command stream reaches the printer. With the printer shared, the classic one-liner still works:
copy /b label.zpl \\PC-NAME\zebra
From code, the Win32 spooler accepts jobs with the RAW datatype
(e.g. Python's win32print), which is the same pass-through
promise made explicit.
When the thing you print is a document, not ZPL: labels laid out in Word, a packing slip from a browser, a PDF. Then something has to convert pages into printer commands — exactly the driver's job. The two workflows coexist happily as two queues for one device: a raw queue for ZPL jobs, a driver-backed one for documents. Problems start only when a job takes the wrong door.
1. The printer printed my ZPL code as text. The job went
through a driver or filter that treated it as a document. Move it to
the raw route — the ZPL itself is fine.
2. Nothing happens at all. Raw paths are silent by design; work
through the checklist in the
network printing
guide, and remember a raw path also has no undo — check the label
in the online viewer before it costs
media.
The job went through a driver or filter that treated the ZPL source as a document to render. Move the job to a raw route — direct socket, raw CUPS queue, or Windows Generic/Text Only — the ZPL itself is fine.
Yes: add the printer on a Standard TCP/IP Port (protocol RAW, port 9100) with the built-in Generic / Text Only driver, use copy /b to a shared printer, or submit spooler jobs with the RAW datatype from code.
When you print documents — pages from Word, a browser or a PDF — something must convert them into printer commands, and that is the driver's job. A raw queue for ZPL and a driver-backed queue for documents can serve the same device side by side.
ZPL is the language Zebra thermal printers understand. How to read the commands, how a label is put together, and the most common mistakes.
Which barcode symbology should I use?EAN-13, Code 128 or QR? Practical rules for picking a barcode based on your data, your space and the scanner that has to read it.
How to preview a ZPL file without a printerA ZPL file is just text — the label only exists once something draws it. Three practical ways to see a ZPL label before it reaches the printer.