Convert DPL to ZPL: retiring Datamax-O'Neil printers in favor of Zebra
How Datamax DPL record-based labels map to ZPL, the unit and record-structure differences, a worked example and a checklist for replacing legacy I-Class and M-Class printers.
Datamax-O'Neil (now part of Honeywell) printers ran warehouses for two decades, and their DPL jobs are still buried in ERP print programs written when the I-Class was new. When those printers are replaced by Zebra ZT units, the DPL streams have to become ZPL. DPL is unusual: instead of commands with named parameters it uses fixed-width numeric records, which makes it compact to send and painful to read.
Command equivalents
| Operation | DPL (Datamax-O'Neil) | ZPL (Zebra) |
|---|---|---|
| Start / end | <STX>L … E (L opens the format, E prints it) | ^XA … ^XZ |
| Units | <STX>n = inches (1/100 in), <STX>m = metric (1/10 mm) | dots |
| Text | Record: rotation, font, width×, height×, size, row, column, data → 1911A030050 0020Hello | ^FO40,30 ^A0N,36,36 ^FDHello^FS |
| Code 128 | Record: rotation, symbology E, wide, narrow, height, row, column, data → 1E2209000650020data | ^BY2 ^BCN,90,Y,N,N ^FDdata^FS |
| Lines / boxes | Record type X with l (line) or b (box) and dimensions | ^GB300,2,2^FS |
| Copies | Q0005 inside the format | ^PQ5 |
| Darkness / speed | H15 (heat) / P (speed) records | ^MD10 ^PR4 |
What actually changes
- Units: DPL positions are in hundredths of an inch (or tenths of a millimeter in metric mode), not dots. Row 0050 in inch mode is 0.50 in = 101 dots at 203 dpi. Every coordinate has to be converted, and the printer's mode (<STX>n or <STX>m) must be read first or everything lands in the wrong place.
- Row and column order: DPL records put the row (vertical) before the column (horizontal); ZPL's ^FO is x then y. Swapping them is the most common translation bug.
- Fonts: DPL internal fonts 0–8 are bitmaps with integer multipliers; font 9 selects smooth (scalable) fonts by a code such as A03. Map bitmaps to ^A0 by measured height.
- Barcodes: DPL encodes symbology as a single letter (A Code 39, B UPC-A, E Code 128, F EAN-13, …) with wide and narrow bar digits; ZPL uses ^B commands plus ^BY. The DPL height is in the record; the human-readable line is a lowercase/uppercase symbology letter choice, not a flag.
- Graphics: DPL downloads images with <STX>I…; convert them once to ^GF or stored ^DG graphics.
Before and after (simplified)
<STX>n <STX>L D11 1911A030050 0020Safety Harness 1E2209000650020 7501234567893 Q0001 E
^XA ^PW812 ^LL609 ^FO40,101 ^A0N,36,36 ^FDSafety Harness^FS ^FO40,132 ^BY2 ^BCN,90,Y,N,N ^FD7501234567893^FS ^PQ1 ^XZ
Row 0050 and 0065 in hundredths of an inch became 101 and 132 dots; column 0020 became x = 40. The record fields were unpacked into named ZPL parameters.
Migration checklist
- Capture real DPL jobs from the ERP spool rather than old design files — the spool is what actually printed.
- Confirm the unit mode and the original printer resolution (203 or 300 dpi I-Class) before converting coordinates.
- Grade every barcode on the Zebra: DPL narrow-bar digits do not map one-to-one to ^BY.
- Identify which record fields the ERP fills dynamically; those become variable fields in the new template.
How EtikStudio does it
The DPL interpreter reads the unit mode, unpacks each record into position, font, size and data, and renders the label in millimeters. Export to a Zebra profile produces ZPL with converted coordinates and rebuilt barcodes; the fields the ERP used to fill become variables connected to the same data.
Command examples are simplified for clarity; exact syntax varies by printer model and firmware. Always test on the target printer.