Convert ZPL to SBPL: migrating labels from Zebra to SATO printers
ZPL to SATO SBPL command equivalents, the escape-sequence structure of SBPL, font and barcode differences, a before/after example and a checklist for food and pharma lines.
SATO printers dominate food processing, pharmaceutical packaging and Japanese-owned plants, and they speak SBPL — a language built from ESC sequences rather than the caret commands of ZPL. A plant that buys SATO for a new line while keeping Zebra at the dock ends up with two copies of every label unless the design is language-independent.
Command equivalents
| Operation | ZPL (Zebra) | SBPL (SATO) |
|---|---|---|
| Start / end | ^XA … ^XZ | <ESC>A … <ESC>Z |
| Label size | ^PW812 ^LL609 | <ESC>A1 0609 0812 (height, width in dots) |
| Field position | ^FO40,30 | <ESC>H0040 <ESC>V0030 |
| Text | ^A0N,36,36 ^FDHello^FS | <ESC>L0202 <ESC>XU Hello (font + magnification) |
| Code 128 | ^BY2 ^BCN,90,Y,N,N ^FDdata^FS | <ESC>BG02090 data (narrow bar 2, height 90) |
| QR code | ^BQN,2,6 ^FDQA,data^FS | <ESC>2D30,L,06,0,0 <ESC>DN0004,data |
| Line / box | ^GB300,2,2^FS | <ESC>FW02H0300 (line) / <ESC>FW0202V0100H0300 (box) |
| Copies | ^PQ5 | <ESC>Q5 |
| Darkness / speed | ^MD10 ^PR4 | <ESC>#E3 <ESC>CS4 |
| Rotation | ^FWR or orientation letter | <ESC>%1 (90°), %2 (180°), %3 (270°) |
<ESC> is the escape character (hex 1B). SBPL commands are sequences of ESC followed by a letter and fixed-width numeric parameters — positions are always four digits, which is why 40 becomes 0040.
What actually changes
- Structure: SBPL sets a position with H/V once and then prints the object; the position persists for the next command unless changed. ZPL repositions every field. A naive translation forgets to reset H/V and stacks fields on top of each other.
- Fonts: SBPL's XU/XS/XM/XB/XL are bitmap fonts with L magnification in whole numbers; outline fonts (ESC RD or ESC $) give scalable text closer to ZPL's ^A0. Japanese and Chinese text uses dedicated font commands ZPL has no equivalent for.
- Barcodes: the B command encodes symbology, narrow bar and height in one code (BG = Code 128); ratios are fixed per symbology rather than free like ^BY. Human-readable text must be added as a separate text field.
- Label size order: SBPL A1 takes height then width — the reverse of ZPL's habit of thinking width first.
- Character encoding: ZPL is mostly ASCII with ^CI for code pages; SBPL Japanese models default to Shift-JIS. Accents in Spanish or French labels need the code page set explicitly.
Before and after
^XA ^PW812 ^LL609 ^FO40,30 ^A0N,36,36 ^FDSafety Harness^FS ^FO40,130 ^BY2 ^BCN,90,Y,N,N ^FD7501234567893^FS ^PQ1 ^XZ
<ESC>A <ESC>A1 0609 0812 <ESC>H0040 <ESC>V0030 <ESC>L0202 <ESC>XU Safety Harness <ESC>H0040 <ESC>V0130 <ESC>BG02090 7501234567893 <ESC>H0040 <ESC>V0230 <ESC>L0101 <ESC>XS 7501234567893 <ESC>Q1 <ESC>Z
The human-readable digits under the barcode had to be added as an explicit text line — ZPL printed them automatically with the Y flag.
Migration checklist
- Confirm the SATO model's resolution and whether it runs SBPL or the newer SBPL with AEP — some commands differ.
- Validate GS1-128 and GS1 DataMatrix output with a verifier; SATO's FNC1 handling uses different escape codes.
- Set the code page for accented characters and test allergen lines in every language you print.
- Keep the ZPL version live for the Zebra units at the dock.
How EtikStudio does it
The design is kept in physical units; exporting to a SATO profile generates the SBPL sequences with positions reset for every object, fonts matched by printed size, barcodes built with the correct symbology codes and FNC1, and the human-readable line generated from the same data field. Food and pharma customers run Zebra and SATO side by side from one library.
Command examples are simplified for clarity; exact syntax varies by printer model and firmware. Always test on the target printer.