Getting codes to print properly

8 minute read · updated 2026-11-02

A code that scans perfectly on screen can fail completely in print. The data has not changed; the physical object has. Ink spreads, colours shift, laminate reflects, and a crisp grid of squares becomes a smudge. Here is what goes wrong, and how to avoid finding out after the print run.

Vector or PNG

A PNG is a grid of pixels at a fixed size. Enlarge it and the module edges go soft. A vector file — SVG or PDF — describes the code as shapes, so it stays sharp at any scale.

Use vector whenever the code is going to a professional printer, a sign maker, an engraver or a vinyl cutter, or whenever the final size is not yet fixed. Send a PDF if your printer will drop it into a layout; send an SVG if a designer is working on it.

PNG is fine for a screen, an email, or a document you are printing yourself at a size you have fixed. Export at 300 dpi at final size — a 4 cm code needs roughly 470 pixels across. Never scale a small PNG up in a word processor and hope.

Codeshed exports all three formats from the same code, so there is no reason to compromise.

Bleed and margins

Commercial printing trims a sheet afterwards, and the trim wanders by a millimetre or two. Keep the code well inside the trim line — at least 5 mm from any edge, more on a folded piece.

Never let a code bleed off the page. It needs its quiet zone, the blank border of about four modules on every side, and a trimmed edge eats into it. If the layout is tight, shrink the code and keep the border.

CMYK and colour shift

Screens use red, green and blue light. Presses use cyan, magenta, yellow and black ink. Colours do not translate exactly, and the conversion tends to flatten and darken. A code that looked like strong navy on dark cream can come back as mid-blue on beige, with much less contrast than you designed.

The safe route is near-black modules on a near-white background: dark enough and light enough that losing some contrast in conversion still leaves plenty.

Avoid building a "rich black" from all four inks for a small code. Four plates have to line up exactly, and any misregistration gives coloured fringes round every module. A single-ink black prints cleaner.

If you want brand colours, apply them to the surrounding design and keep the code dark on light. Inverted light-on-dark codes are read inconsistently by phone cameras, whatever the print quality.

Laser, inkjet and absorbent paper

Laser printers fuse toner on the surface, so edges stay sharp. Inkjets lay down wet ink that soaks in and spreads, and the effect is much worse on absorbent stock — uncoated card, kraft labels, newsprint, corrugated board.

Ink spread makes dark modules grow into the light gaps between them. On a dense code the gaps close up and the pattern becomes unreadable. Print bigger, keep the data short so the modules are fewer and larger, and choose a smooth stock. This is why ITF-14 carton codes carry a heavy frame — see which barcode should I use.

Thermal label printers need checking too. Low density gives pale, broken modules; too high gives spread. Print one test label and look closely before running a roll.

Lamination and gloss

Gloss lamination and varnish make a code shine, and a shiny code reflects ceiling lights straight back into the camera. Under shop or warehouse strip lights a glossy code can be impossible to scan from the obvious angle, and people give up rather than tilting the phone.

Matt or satin lamination scans far better and still protects the surface. If gloss is fixed, ask whether the printer can leave a matt patch over the code area.

Curves and folds

On a bottle, a jar or a tin, the code bends away from the camera and the modules distort. Keep it on the flattest part of the face, narrow relative to the curve — much beyond a third of the visible width gets difficult — and print it larger than you would on a flat label.

Never let a code straddle a fold on a leaflet. The crease breaks the pattern and the halves sit at different angles. Check the folded dummy, not the flat artwork.

Label sheets

Sheets of blank labels drift. Your software's template and the actual die-cut positions are rarely identical, and a millimetre of offset pushes a code towards the label edge, where it loses its quiet zone.

Print one sheet on plain paper, hold it against a real label sheet in front of a window, and check alignment before feeding the labels. Leave generous margins inside each label.

Ready-made layouts for common Avery, Avery Zweckform and Herma sheets, with a test page, come with Codeshed Plus, the subscription in the Codeshed app (coming soon), and open on a computer linked to the app. Until then, download the SVG or PDF and place it with the free online template from your sticker maker.

Pre-print checklist

  1. Vector file (SVG or PDF) supplied, or PNG at 300 dpi at final size.
  2. Quiet zone intact on all four sides, nothing overlapping it.
  3. Dark modules on a light background, strong contrast after CMYK conversion.
  4. Single-ink black rather than rich black on small codes.
  5. Code at least 5 mm inside the trim, clear of folds, creases and spine.
  6. Size checked against the real scanning distance.
  7. Matt or satin finish over the code.
  8. Proof printed on the actual stock and scanned with two different phones, in the lighting where it will live.
  9. Original file and the code's content saved somewhere you will find them again.

The proof step is the one people skip, and it is the only one that catches everything else.

Read next

Make a code in the workshop →

Codeshed is a trading name of Third Coffee Studio Ltd, registered in England and Wales, company number 17517422.