Printing codes that survive the press

A code is a measuring instrument disguised as a graphic. Everything a printer does to make artwork look good on paper, spreading ink, adding gloss, curving the substrate, works against the thing a scanner is trying to measure.

Updated 8 September 2026

Send vector if you possibly can

A code is made of hard-edged squares, which is exactly what vector formats are for and exactly what raster formats are worst at. An SVG, EPS or PDF scales to any size with the edges intact. A PNG has already decided where the edges are, and resizing it later either softens them or leaves them ragged.

If the workflow demands a raster file, export at 300 dots per inch at the final printed size, not at the size it happens to be on screen. Then leave it alone. Scaling a bitmap code up in a layout application is the most common way a perfectly good code arrives at the press blurred.

Ink spreads, and it spreads into your light modules

Every printing process lays down slightly more ink than the file specifies. Printers call it dot gain. On coated stock it is modest; on uncoated, absorbent or fibrous material it can be substantial, and on corrugated cardboard it is dramatic.

For a code this is asymmetric damage. Dark modules grow and light modules shrink, so the threshold a scanner uses to tell them apart drifts. Push it far enough and thin light features close up entirely.

The trade has a standard answer for one-dimensional barcodes, called bar width reduction: the bars are drawn slightly narrow in the file so they come out correct on the substrate. Your printer will know the figure for their process and stock. It is worth asking rather than assuming, particularly for flexographic printing on packaging, where the compensation is large.

For two-dimensional codes the equivalent lever is bluntly making the modules bigger. If a code is going onto board, a bag or anything absorbent, budget more size than the same code would need on a label.

Gloss is the enemy of the camera

A gloss laminate, a varnish or a shiny plastic card produces specular reflection: a bright highlight where the light source bounces straight back into the lens. Over a code, that highlight erases whatever it covers, and it moves as the reader moves, so the failure feels random and the person scanning tilts the phone around blaming themselves.

This is worst under a single hard light source, which describes most retail lighting, most restaurant lighting and every ceiling downlight. If the piece must be laminated, ask for matte, or ask for a matte patch over the code area if the process allows it.

Curves, folds and trims

  • Curvature. A code wrapped around a bottle or a tube is being read off a cylinder, and the modules near the edges are foreshortened. Keep the code to a modest arc of the curve. On small-diameter items, put it on a flat panel or a hang tag instead.
  • Folds. A crease through a code is a hard break in the grid, not a smudge. Keep codes clear of fold lines on leaflets and cartons, including the fold lines nobody drew because the piece gets folded in use.
  • Trim tolerance. A code near the edge of a trimmed piece can lose part of its quiet zone to the guillotine. Treat the quiet zone as artwork that must sit inside the safe area, not as margin that can absorb the tolerance.
  • Stretching. Non-uniform scaling breaks a QR code outright, because the decoder builds a square grid. Lock the aspect ratio in the layout, and check it after anyone else has touched the file.

Difficult surfaces

SurfaceThe problemWhat helps
Corrugated boardHeavy ink spread, flute linesLarge modules, higher error correction
Fabric and canvasWeave breaks module edgesMuch larger modules; avoid fine codes entirely
Glossy cardSpecular highlightsMatte finish over the code
Etched or laser-marked metalLow contrast, directional reflectionVerified module size, controlled lighting
Thermal receipt paperFades with heat, light and timeHigher error correction; treat as short-lived
What each surface does to a code

Proof the artifact, not the file

Everything above is a reason the file on your screen is not the thing your customer will point a phone at. So the only proof that counts is a physical sample from the actual process, on the actual stock, with the actual finish.

  1. Scan the printed sample with an iPhone and an Android handset. They use different decoders and they do not fail on the same things.
  2. Scan it in the light the piece will live in, including the dim version of that light.
  3. Scan it at the real distance, and at an angle, not held flat at 100mm.
  4. Check the destination that opens is exactly right, including the scheme and any tracking parameters.
  5. Try one sample from the far end of the run, not only the first one off the press.