QR Code Free Forever QR Code Free Forever Create QR codes. 100% free. Forever. Make a QR code

Home · Guides

How to Print a QR Code

A QR code that works perfectly on a screen can come out of a printer dead. The reasons are boringly physical — ink spreads, paper absorbs, toner streaks — and every one of them is avoidable at the design stage.

Start with the right file

Send vector — PDF, SVG or EPS — to anyone with a professional press. A QR code is a set of exact rectangles, and vector formats keep them exact at every size. If the workflow only accepts a bitmap, generate the PNG at the final printed size rather than scaling one up later; the arithmetic is in the printing size guide.

Never JPEG. JPEG compression is designed to be invisible in photographs, and it works by smoothing exactly the kind of hard black-and-white boundary a QR code consists of. The damage is subtle on screen and fatal at small sizes.

One refinement worth asking your printer about: make each module land on a whole number of printer dots. A 29-module code printed 30 mm wide at 300 dpi gives 12.2 dots per module, and that fractional 0.2 shifts along the row, so some module edges land on a dot boundary and some do not. Nudging the width so it comes out at exactly 12 dots per module gives visibly cleaner edges. On thermal label printers, which are often 203 dpi, this matters a great deal.

Contrast, and what we actually measured

The standard advice is that a QR code needs strong contrast. We wanted to know how strong, so we generated the same code with the dark modules stepped from black through progressively lighter greys and ran each through a simulated camera, 40 attempts per step.

The result was not what we expected. The decoder read the code reliably far below the contrast ratios usually recommended — down to about 2:1, which is a mid-grey on white and looks washed out to the eye. Even adding a strong illumination gradient across the frame did not change it much.

The honest conclusion: modern decoders binarise adaptively and are much more tolerant of low contrast than of low resolution. In our tests, halving the module size destroyed a code that halving the contrast did not.

That is a measured result on synthetic images, and it comes with a caveat that matters. Real failures at low contrast come from things our model does not reproduce — specular reflections on laminate, coloured ink on coloured stock, a phone's aggressive noise reduction in a dim restaurant. So the practical advice does not change: print dark modules as near black as the process allows, on the lightest stock you have. What changes is where you spend your worry. If a code is failing, the module size or the print quality is a far more likely culprit than the greyness of the ink.

Two things that genuinely do break contrast, rather than merely reducing it:

Do not invert the code

Light modules on a dark background look excellent on a poster. We tested it: zero successful reads, out of every attempt, with the decoder we used.

A normal QR code beside an inverted one, the inverted marked as unreadable
Dark-on-light against light-on-dark, same payload, same size. The inverted version did not decode once in our tests. Some scanners do handle inversion; enough do not that it is not worth the risk on printed material.

Some decoders do try both polarities, so an inverted code will work for some people. That is exactly the problem: it will work on the designer's phone and fail for a fraction of the audience, silently, with no way for you to find out. If the design needs a dark panel, put a light plate behind the code — extending four modules past it on every side — and keep the code the right way round.

Ink spread and the small-code trap

Ink spreads into paper. On uncoated or recycled stock, each dark module ends up fractionally wider than designed, and each light module fractionally narrower. At 30 mm the effect is invisible. At 12 mm, where a module might be 0.35 mm across, a 0.05 mm bleed is a 14% distortion on every single edge.

That distributed, everywhere-at-once damage is the worst kind for error correction. Our damage tests found that scattered damage is four to seven times more destructive than the same area concentrated in one blot — the numbers are in error correction explained. Ink spread is the definitive scattered case, which is why a code can look perfect and still fail.

What helps:

Printing on things that are not paper

SurfaceWhat goes wrongWhat to do
Corrugated cardFlutes distort the gridPrint across the flutes, not along; go 30% bigger
Fabric and apparelWeave scatters module edgesLevel H, minimum 40 mm, avoid textured weaves
Curved bottles and tinsGrid warps out of squareKeep the code under a third of the circumference
Glossy laminateReflections wipe out regionsMatt finish, or angle away from lighting
Thermal labels203 dpi, coarse dotsWhole dots per module; test the actual printer
Engraved metalLow contrast, specular glareBead-blast the background; contrast beats depth
Vinyl vehicle wrapFlexes and stretchesFlat panels only; never across a body crease

Curved surfaces deserve one extra note. The alignment patterns inside a code exist to correct for exactly this kind of warp, and there are more of them in bigger symbols — so on a bottle or a jar, a larger code is not just easier to see, it is structurally better equipped to be read. Codes on product packaging goes into this in detail.

Test the print, not the file

The last step is the one that gets skipped. Print the proof, then:

The full pre-print checklist has twelve of these, in order.

Written by Manuel Llovet, who builds and maintains QR Code Free Forever. Published 2026-08-31, last checked 2026-09-08. Figures and measurements on this page were produced for this site; the method is described in each caption.

Make this code now

Free, no sign-up, and it never expires. Everything runs in your browser.

Open the generator

Keep reading