🔳 QR Codes

Printable QR Code Generator

Quick answer: Download your QR code as a true vector — PDF, EPS or SVG — so a printer can scale it to any size without a soft edge. Six things decide whether a printed code actually scans: the quiet zone, contrast, minimum size, error correction, logo size and what file you send. Every number on this page came from generating real codes and reading them back with two independent decoders.

A code on a screen either works or it doesn’t, and you find out in a second. A printed one fails weeks later, on somebody else’s phone, in worse light than you tested in — by which point you have five thousand of them. Six things decide it, and every number below came from generating real codes and reading them back with two independent decoders.

Make a printable QR code →

Send the printer a vector, not a picture

This is the one decision that removes a whole class of problem. A PDF or EPS holds the code as shapes, so the printer’s own raster stage draws it at whatever resolution the press runs at — 300, 600, 2400 dpi — and the module edges stay exact at any size. A PNG holds pixels, and every later resize has to interpolate them.

We did measure how much that actually matters, and the answer is less than the folklore suggests. Rendering the same code at one pixel per module upward, it decoded on both engines from 1 pixel per module — the whole image only 237 px at the smallest — across all 10 sizes tried. Then we took a finished PNG and rescaled it the way a layout program would, to 8 sizes including deliberately awkward fractions down to 1.00 pixels per module. Every one still read.

So the honest version is: pixel count is rarely what kills a printed code. Physical size, contrast and the quiet zone are. Take the vector anyway, because it costs nothing and it means nobody downstream can resample it badly — but if all you have is a PNG, it is probably fine.

FormatGive it to a printer?Why
PDFYesTrue vector, page sized in millimetres, opens anywhere
EPSYes — often what they ask forTrue vector, the format most print workflows expect
SVGFor a designer, yesVector, editable in Illustrator or Figma
PNGWorkablePixels. Fine at size, but do not let anyone stretch it
JPGNoJPEG compression rings around exactly the hard edges a scanner looks for

Minimum size: the number that actually matters

A module — one little square — should not fall much below 0.4 mm in print. Below that, ink spread on paper and the camera’s own blur start merging neighbours. How wide that makes the whole code depends entirely on how much you put in it, because more content means more modules in the same square:

Printed widthModule size (typical link)At 300 dpi that isVerdict
20 mm0.49 mm237 px, 5.8 dots per moduleTight — short content only
30 mm0.73 mm355 px, 8.6 dotsComfortable for print
50 mm1.22 mm591 px, 14.4 dotsPoster, packaging, table tent
80 mm1.95 mm945 px, 23 dotsRead from across a room

A rough working rule for distance: a code scans from about ten times its own width. A 30 mm sticker is comfortable at arm’s length; a poster read from three metres wants 300 mm. The panel under the generator does this sum for the code you actually build, because guessing from a table is how codes end up too fine.

The quiet zone is part of the code

The empty margin around the pattern is not styling — it is how a scanner knows where the code ends. The standard asks for four clear modules. On a white page you cannot tell whether a generator included it, which is exactly why it gets dropped. Put the same code on a dark background and the difference is total:

The code sits on…With the standard marginWith none
a white pagescansscans
a dark backgroundscansfails

Sweeping the margin one module at a time, the code stopped reading once the clear space ran out. Design agencies trim it constantly, because on the artwork it looks like wasted space. It is the cheapest thing on this page to get right: leave it at four, and if the code sits on a coloured panel, give it its own white tile rather than trusting the panel.

Contrast: where decoding actually stops

Brand colours are fine until they are not, and “looks dark enough” is not a test. Stepping a grey foreground against white and decoding at every step, everything at a contrast ratio of 4.06:1 and above read, and everything at 4.00:1 and below failed.

So under 4:1 is refused outright by the generator, and 4:1 to 7:1 is flagged — it reads from a clean file, but leaves nothing spare for a phone camera pointing at a menu in a dim restaurant. Two further rules that catch people out in print: never invert (light code on a dark ground) unless you have tested the actual scanners, because many refuse it; and remember that ink on uncoated stock goes darker and spreads, so a pair that measures fine on screen has less margin on paper than you think.

Error correction, and what it does not buy you

Higher error correction lets a code survive scuffing, a coffee ring or a fold. It also makes the code bigger and hold less:

LevelRecovers aboutMaximum charactersUse it when
L7%2953Content is long and the code is protected
M15%2331The sensible default
Q25%1663Print that will get handled
H30%1273A logo, or a rough environment

For print, Q or H is usually right. But note the trade in the last column: H holds only 1273 characters, so a long contact card physically cannot use it. Long content belongs behind a short link, which also makes the code coarser and easier to print.

Logo size: the most repeated wrong thing about QR codes

“Level H recovers 30%, so my logo can cover 30%” is false, and it is what breaks printed codes months after they were made. Recovery is counted in codewords spread across the whole symbol; a logo destroys a solid block in one place. Sweeping a centre block across payload lengths and levels, the largest that still read at level H covered 15.2% of the code’s area on a long payload — nowhere near 30%.

There is no safe percentage to print on a slider, because the workable size depends on how much content is in the code as much as on the level. So the generator does not print one: it decodes your actual code, with your actual logo, and tells you whether your content came back before you download it. For anything going to print, that check is the only one worth trusting.

Before you send it: a five-minute test

Everything on this page is generated in your browser — the page has no fetch, no XMLHttpRequest and no form, so a link, a menu or a payment address never leaves your machine. The codes are static, so there is no subscription that can switch your print run off.

Frequently Asked Questions

Yes. The PDF is a true vector at 30 mm square, so a printer can scale it to any size without a soft edge, and there is no account or watermark. EPS is there too, which is what most print workflows actually ask for, along with SVG for a designer and PNG or JPG for screens. Take the PDF or EPS for anything going on paper: a vector is rasterised by the printer at its own resolution, so nobody downstream can resample it badly.
Less than you would think, and the physical size matters far more. Rendering the same code at one pixel per module upward, it decoded on both engines from 1 pixel per module; rescaling a finished PNG to awkward fractional sizes, down to 1.00 pixels per module, every one still read. What actually breaks printed codes is a module below about 0.4 mm, weak contrast, or a missing quiet zone. Send the vector PDF or EPS and the question goes away entirely.
Keep one module at or above about 0.4 mm and work back from there. For a typical link that means roughly 20 mm square as a floor and 30 mm as comfortable — but it depends entirely on your content, because more characters means more modules in the same square and each one gets smaller. A code also scans from about ten times its own width, so size it for the distance people will actually stand at.
Four usual causes, in order. The quiet zone was trimmed — designers cut it because it looks like wasted margin, and a code with no clear space fails the moment it sits on anything but white. The code was printed too small, so modules fell under about 0.4 mm and ink spread merged them. Contrast was too low on paper, where ink goes darker and spreads compared with a screen. Or a logo covers more than the error correction can rebuild.
Q or H for anything that will be handled, scuffed or folded; M is fine for a clean page. The trade is capacity: H holds only 1273 characters against M’s 2331, so a long contact card physically cannot sit at H. If your content is too long for the level you want, put it behind a short link — which also makes the code coarser, and a coarser code prints better.
Smaller than the error-correction level suggests. "Level H recovers 30%" describes codewords spread across the whole symbol, not a solid block you may paint over — in our sweep the largest logo that still read at H covered 15.2% of the code’s area on a long payload. There is no percentage safe enough to print on a slider, so the generator decodes your actual code with your actual logo and tells you whether it still reads.
Neither, if you can avoid it — use the PDF or EPS. Between the two, PNG every time: JPEG compression works by smoothing away sharp transitions, which is precisely what a QR code is made of, so a JPG at a normal quality setting rings around every module edge. JPG is offered because people are sometimes required to supply one, not because it is a good choice here.
Not these. The destination is encoded into the pattern itself, so there is no redirect, no short link and no account behind it — nothing that can lapse and take your print run with it. The trade is the honest one: a static code cannot be repointed after printing, so if the destination changes you reprint. If you need to change it later, put a redirect on a domain you own and encode that.

Related tools