Paxar PCL command reference

The label format language of SNAP 500 and SNAP 700 printers · updated 1 October 2026

SNAP printers read a format language the firmware itself calls PCL. It is not HP PCL, which uses ESC sequences, and it is not Zebra ZPL, which uses ^XA … ^XZ. Here every command starts with a tilde, and a format runs from ~XA to ~XZ~.

There is no public specification for this language. Everything below was derived from the test formats shipped in the printer firmware, from a real production print job, and from the firmware changelog — then checked against printed labels. Each command carries how sure we are. Paste a format into the viewer to see it drawn.
confirmed matches every sample, or the firmware says so inferred consistent with every sample, not proven unknown appears in files, meaning not established

Syntax

Structure of a job

~XA~XW1000~XP3250~XD300 …     format header
~FA08~FDF~FR0~FW0586~FP1313 … one field per line (text, line, logo, image)
~XZ~                          end of the format
~ZD00                         always 00
~ZITESTPAT1                   format name (optional)
~DTOP HEAD                    one ~D per data field, in field order
~I<binary PCX>                one ~I per ~FM field, in order
~ZZ50000~                     batch quantity

How data reaches the fields confirmed

Header · ~X

CommandValues seenMeaningStatus
~XA—start of formatconfirmed
~XZ~—end of formatconfirmed
~XW510 … 2007label width, thousandths of an inch (across the web)confirmed
~XP1500 … 4000label length, thousandths of an inch (feed direction)confirmed
~XD300resolution in dpi; assume 300 when absentconfirmed
~XX500, 700printer modelconfirmed
~XS45, 60print speed, tenths of an inch per secondinferred
~XGLgraphic field prefix: always right before ~FG or ~FMconfirmed
~XN ~XTN1–N3; T97, T91station and some type attached to itunknown
~XU ~XF ~XL ~XCS0; N; 1; 01—unknown

Fields · ~F

CommandMeaningStatus
~FAnntext field; nn is the maximum number of charactersconfirmed
~FLnnline; always 01 in the samplesconfirmed
~FGnnlogo stored in the printer; the ~D carries the logo numberconfirmed
~FMimage that arrives inside the job as ~Iconfirmed
~FBbarcodeinferred
~FDstation: F, B, 1, 2 or 3confirmed
~FWposition across the width, thousandths of an inchconfirmed
~FPposition along the length, thousandths of an inchconfirmed
~FRrotation, 0 to 3 (each step 90°, counter-clockwise)confirmed
~FTRW ~FKRFID: write to the chip, enabled stationunknown

Geometry: ~FW grows upwards and ~FP grows along the label length, with the origin at the bottom-left corner of the tag. At rotation 0, text runs along the length. This was checked against printed labels.

Text parameters · ~A

CommandValues seenMeaningStatus
~AL5, 9, 10, 759font number; selects FNTnnnnn.TTF in the printerconfirmed
~AP6 … 20type size in pointsinferred
~AC850, 999, 998code page: maps each data byte to a code point in the selected font. 999 is the care symbol table, 998 the NAFTA symbol tableconfirmed
~AW220 … 2600field width along the reading direction, thousandthsinferred
~AEL, C, Ralignment inside ~AWinferred
~AI00 … 07likely character spacing (ICS)unknown
~AQ ~AB ~AR0, 3; D; 0, 2—unknown

Line parameters · ~L

CommandMeaningStatus
~LW ~LPend point of the line; the start is the field's ~FW/~FPconfirmed
~LV ~LHthickness, read in printer dotsinferred
~LT ~LR—unknown

Graphic parameters · ~G

Logos and job images carry ~GM, ~GT, ~GU, ~GE and ~GR. ~GM is 3 on ~FG and 4 on ~FM, which suggests it marks where the graphic comes from. The rest is unknown.

Data, images and batch · ~Z

CommandMeaningStatus
~Ddata for one field, in field orderconfirmed
~IPCX image for one ~FM field; binaryconfirmed
~ZIformat nameconfirmed
~ZZnnnnn~batch quantity. Without it the format does not printconfirmed
~ZDalways 00unknown

Stations

A tag can be printed by more than one head. ~FDF is the top head (front) and ~FDB the bottom head (back). Machines with three stations use ~FD1, ~FD2 and ~FD3. Each field belongs to exactly one station.

Volatile logos and queries

The firmware changelog mentions commands that never appeared in the files we have: ~V downloads a volatile logo that lives in memory until ~VD~ erases it or the printer is switched off, and ~QRR asks the printer for a file name. They are listed here for completeness and are unknown in practice.

Barcodes

A barcode is a ~FB field and its data comes in the usual ~D line. Which symbologies the printer itself can draw is settled — its firmware names them one by one, and its error messages (CODE 39 BAD DATA, BAD UPCE DATA, BARCODE FIT ERROR, BARCODE VERIFY ERROR) are symbology specific:

SymbologyNotes
Code 39the classic for internal part numbers
Code 128_ and ^ act as FNC1
Code 128 E.D.I.AI (00), fixed 20-digit data (SSCC)
Interleaved 2 of 5optional check digit
UPC-EHRI can be segmented 1–6
EAN-8, EAN-13also as GS1 composites
GS1 DataBar, Expanded Stacked, Compositeused for GS1 application identifiers
Data Matrix2D, write modes OR and DIRECT

What is not settled is the parameter inside the field that picks the symbology, the module width, and whether the human readable line is a field of its own. No format we have access to contains a barcode field, so for now the viewer lets you choose the symbology by hand and draws Code 39, Code 128, EAN-13, EAN-8, UPC-A and Interleaved 2 of 5 from the field data.

Care symbols

A care symbol field is an ordinary text field with ~AC999. The printer runs every character of the data through its code page 999 table, which returns the code point of the symbol inside the care symbol font — one character in, one symbol out. The table is regular: symbol number N is the ASCII character 0x21 + N, so # is symbol 2, 9 is Do Not Wash and P is Size Small. ~AC998 does the same for NAFTA symbols.

Two details are still open. The field length in ~FAnn counts symbols, and the printer firmware notes that the host sends three characters per symbol — so the design software seems to encode each symbol as a three-digit code before the printer reduces it to one byte. And the care symbol fonts themselves are licensed by the printer manufacturer, so Labelisk cannot redistribute them: a care symbol field renders with a warning instead of the symbols.

If you have a format with care symbols, or one with a barcode, send it over with a photo of the printed tag. That is what turns the inferred rows above into confirmed ones.

Example

A complete two-sided label, with a frame, text fields and a barcode, is loaded by default in the viewer. Change a number there and the drawing follows along, which is the quickest way to understand a command.