9. Barcodes and QR codes
Barcodes are drawn as sharp vector graphics at exactly the size of their box, so they scan reliably from laser, inkjet and thermal printers.

Add a barcode
- Drag Barcode (or QR Code) from the Insert tab onto the page.
- In Properties → Barcode, choose the Format.
- Set Value, usually a binding:
{{ orderNumber | SO-104412 }}. - Turn Human-readable text on to print the value under the bars (1D formats).
- Resize the box. The barcode stretches to fill it exactly.
Which format to use
| Format | Encodes | Typical supply-chain use |
|---|---|---|
| Code 128 | Any text: letters, digits and symbols | Order, BOL, PRO, tracking, LPN, SKU and location numbers. The default choice |
| GS1-128 | GS1 Application Identifiers, e.g. (00) SSCC, (01) GTIN, (10) lot, (17) expiry, (420) ship-to postal code |
Shipping and pallet labels (SSCC), case labels |
| Code 39 | Digits, CAPITAL letters, space and - . $ / + % |
Older systems, automotive (AIAG), some government labels |
| Code 93 | Like Code 39, more compact | Rare; logistics in some regions |
| EAN-13 / EAN-8 | 12/7 digits plus check digit | Retail product barcodes (outside North America) |
| UPC-A / UPC-E | 11/6 digits plus check digit | Retail product barcodes (North America) |
| ITF-14 | 13 digits plus check digit (a GTIN-14) | Corrugated shipping cases |
| Interleaved 2 of 5 | An even number of digits | Legacy warehouse and carton labels |
| Codabar | Digits and - $ : / . + with start/stop letters A–D |
Libraries, blood banks, some legacy systems |
| QR Code | Any text, including URLs, up to a few thousand characters | Returns portals, tracking links, mobile scanning |
| Data Matrix | Any text, very compact | Small parts, electronics, healthcare |
| GS1 Data Matrix | GS1 Application Identifiers | Pharmaceutical and medical device serialization |
| PDF417 | Lots of text in a stacked barcode | Some carrier labels, ID documents |
| Aztec | Any text, compact | Transport tickets, some carrier labels |
Check digits
Retail and GS1 barcodes end with a check digit, which scanners use to detect misreads.
- EAN-13, EAN-8, UPC-A, UPC-E, ITF-14: send the number without the check digit (12 digits for EAN-13), and the check digit is calculated for you. Or send it with the check digit, and it is verified. A wrong check digit leaves the barcode empty and adds a warning, such as "Incorrect EAN-13 check digit provided".
- GS1-128 with
(00)SSCC or(01)GTIN: the 18-digit SSCC or 14-digit GTIN must include its check digit. A wrong one gives the warning "AI 00: Bad checksum". Your WMS normally calculates it. - Code 128, Code 39, QR and others have built-in error checking. There is nothing to calculate.
SSCC labels (GS1-128)
The SSCC (Serial Shipping Container Code) identifies one carton or pallet. On a GS1-128 barcode, it is written with the Application Identifier 00
in parentheses:
(00){{ sscc | 006141411200458719 }} → (00)006141411200458719
- Add a Barcode and set Format to GS1-128.
- Set Value to
(00){{ sscc | 006141411200458719 }}. The parentheses are required. They mark where each Application Identifier starts and are not encoded as characters. - Turn Human-readable text off and add a separate text element below the bars,
(00) {{ sscc | 006141411200458719 }}, in a 10–12 pt monospaced font such as Cousine. This matches the usual label layout. - Make the box about 4 in wide by 1.25 in tall on a 4×6 label (at least 0.5 in tall).
Combine several Application Identifiers in one barcode by writing them one after another:
(01){{ gtin | 00084123015004 }}(17){{ formatDate(expiry, 'YYMMDD') | 270930 }}(10){{ lot | L26814 }}
(420){{ shipTo.zip | 43215 }} → (420)43215
| AI | Meaning | Format |
|---|---|---|
(00) |
SSCC | 18 digits |
(01) |
GTIN | 14 digits |
(02) |
GTIN of contained items | 14 digits |
(10) |
Batch / lot | Up to 20 characters |
(11) / (13) / (17) |
Production / packaging / expiry date | YYMMDD |
(37) |
Count of contained items | Up to 8 digits |
(400) |
Customer PO number | Up to 30 characters |
(420) |
Ship-to postal code | Up to 20 characters |
Sizing barcodes so they scan
| Rule of thumb | Why |
|---|---|
| Keep 1D barcodes at least 0.5 in (36 pt) tall, and 1 in or more on labels scanned from a distance | Taller bars are easier to aim at |
| Leave a quiet zone, a blank margin, of at least 0.25 in (or 10× the narrowest bar) to the left and right of 1D barcodes | Scanners need blank space to find the start and end. Turn on Quiet zone if the box touches other elements |
| Don't squeeze a long value into a narrow box | The bars get too thin to print. Widen the box, shorten the value, or switch to Code 128 (more compact than Code 39) |
| QR and Data Matrix: at least 0.6 in (43 pt) square for phone scanning, 1 in or more for fixed scanners | Each module must be printable |
| Print black bars on a white background | Colored or low-contrast barcodes may not scan |
| On thermal printers, prefer bars that run in the print direction ("picket fence") | Reduces smearing |
Tip: Always test-scan a printed sample with the scanners used in the warehouse before going live, especially for new label stock or printers.
Worked example: a BOL number barcode
- In the BOL's Page Header, add a Barcode in the top-right corner, 2.5 in × 0.45 in.
- Format: Code 128. Value:
{{ bolNumber | BOL2026102001 }}. Human-readable text: off. - Above it, add a text element
BOL #: {{ bolNumber | BOL2026102001 }}, bold, 9 pt, right-aligned.
Because it is in the page header, the barcode repeats on every page of the BOL.
In the designer
On the canvas, barcodes are drawn as a placeholder pattern so the designer stays fast. Preview PDF shows the real barcode, encoding the preview text, or a valid sample value if the preview text isn't valid for the format. The real render encodes the data.