ZPLToolkit

^B4

Code 49 Bar CodePreview: partial

A stacked symbology from before 2D codes existed: two to eight rows of bars in the footprint of a short linear code.

Syntax

^B4o,h,f,m

Parameters

ParameterDescription and accepted valuesIf omitted
oRotation of the bar code on the label.N normal, R 90°, I 180°, B 270°Last ^FW value, else N
hHeight of an individual row in dots, not of the whole stack.1 to 32000 dots — height of one rowHeight set by ^BY
fWhere to put the human-readable line, or N for none.N none, A above, B below — interpretation lineN
mStarting mode. A lets the printer choose, which is almost always right.0 to 5 — starting mode, A automaticA

How it works

^B4 prints Code 49, one of the first attempts to get more data onto a label than a single row of bars could hold. It stacks between two and eight rows, each row a linear code in its own right, and a scanner reassembles them.

It encodes the full ASCII set and packs digits two to a character, which made it attractive for small parts labelling in the 1980s. Data Matrix (^BX) and QR (^BQ) have taken over that job, and Code 49 now appears mostly in older aerospace and automotive specifications that have not been revised.

The height parameter sets the height of one row, not of the whole symbol — a symbol that grows a row grows taller by that much. Leave it out and the printer spreads the ^BY bar height across however many rows the data needs.

Example

ZPL
^XA
^BY2,3,80
^FO60,60^B4N,20,A,A^FDZPL TOOLKIT^FS
^XZ

Rendering…

Code 49 carrying eleven characters, at a row height of 20 dots.
Open in the viewer

How the preview on this site handles it

Drawn with a real Code 49 encoder, so it scans, and rotation is applied. The human-readable line from `f` is not drawn, and the starting mode from `m` is left to the encoder — asking for a specific mode changes nothing in the preview.

Common mistakes

  • Reading `h` as the height of the whole symbol. It is the height of one row, so a taller value multiplies with the row count and can run off the label.
  • Choosing it for a new label. Code 49 is legacy; unless a customer specification names it, ^BX or ^BQ hold more data in less space and every modern scanner reads them.
  • Expecting a scanner to read it untrained. Like Code 11, Code 49 is usually disabled in scanner firmware by default.

See also