PDF document QR code generator
100% Private & Local — Your data never leaves your browser. These QR codes are permanent and will never expire.
PDF document settings
Design
Add a centre logo
The image is read in this page and embedded in the code as a data: URL. It is not uploaded, and it stays inside the file you download.
More design options
The dark half of the code. Keep it well below the background in lightness.
Covers the quiet zone as well as the gaps between modules. A transparent background leaves it out of the file, so nothing is drawn with it.
Contrast 11.5:1 between the modules and the background.
PNG and WebP keep an alpha channel; the SVG simply omits the background rectangle. Whatever the code is placed on becomes the light half of the contrast.
A gradient fills the dark modules only. Its lighter end sets the contrast a scanner actually gets, so both ends have to stay dark.
The second colour, used only while a gradient is selected. It is measured for contrast alongside the first.
Degrees clockwise from a left-to-right sweep. A radial gradient spreads from the centre outwards, so the angle applies to a linear one only.
Rounded shapes cover less of each cell. The centre stays covered, which is where a decoder samples, but a small print of a dense code reads more reliably as squares.
The ring of the three finder patterns.
The eye inside each finder pattern.
The blank margin around the code, measured in modules. 4 is the specified minimum.
Higher recovery survives more damage and costs capacity, so the same content produces a denser symbol.
A logo sits at the centre and holds the level at H. Its width limit follows the symbol: 14% on the smallest code, 30% on a dense one.
Live preview & export
Enter the address the PDF is served from.
Export
Raster, for screens
Complete the form to enable the downloads.
Export size and encoded text
- Payload
- Nothing encoded yet
- Symbol
- Not built yet
- Recovery
- M
Waiting for input
A QR code cannot hold a PDF, so this encodes the address where your PDF lives. The link is written into the symbol itself, which means the code is permanent and the hosting is the part you have to keep alive.
When someone scans it
The reader opens the link. The phone then previews or downloads the PDF, depending on the browser and how your server serves the file.
A QR code stores a link, not a file
The largest symbol the format defines — version 40 at recovery level L — holds 2,953 bytes, a little under three kilobytes. A one-page PDF is usually somewhere between 50 and 500 kilobytes, so a document is one to three orders of magnitude too large to print into a square. Every PDF QR code, everywhere, is a link.
That has a consequence worth being blunt about. The symbol will still decode in twenty years, because the address is physically printed in it. Whether the file is still at that address is a hosting question, and no printed code can answer it.
Hosting it so the link keeps working
The address you encode is the promise you are making to everyone who scans the printed copy, so pick one you can keep. A path on a domain you control is the only kind that qualifies.
Short paths also make smaller symbols. /docs/menu.pdf is 15 characters and stays in a low version; a 120-character generated storage key pushes the same code several versions higher for no benefit.
- Signed or expiring links — the temporary download addresses cloud storage hands out — decode perfectly and then fail on the expiry date
- Anything behind a login shows a sign-in screen rather than the document
- Keep the filename stable: re-uploading as handbook-v2.pdf breaks every copy already printed
- Replace the file at the same address instead, and every printed code picks up the new version
- Serve it over https, so the browser does not warn before opening it
What the phone does with the file
Opening a PDF is browser behaviour, not QR behaviour, and it is not uniform. Safari on iOS and Chrome on Android render most PDFs inline. Some Android browsers download the file and hand it to a separate viewer. A desktop scanner typically just gives you the address.
Your server has the deciding vote on one point: a file sent with Content-Disposition: attachment downloads instead of previewing, on every platform. If you want the document to open in place, do not set that header.
Questions and answers
Can the PDF itself go inside the QR code?
No. The format tops out at 2,953 bytes, which is smaller than almost any real PDF. The code holds the address the file is served from.
What is the document title used for?
One thing only: it names the SVG, PNG or WebP file you download, so twenty exports in a folder can be told apart. It is not part of the payload, so it changes nothing about what a scanner reads.
What happens when I update the document?
If you replace the file at the same address, every printed code keeps working and shows the new version. If you upload it under a new filename, the printed codes point at a file that is no longer there.
Does the file have to be public?
It has to be reachable by whoever scans the code. A code on a public poster needs a publicly readable file; a code inside a building can point at an intranet address that only resolves on that network.
How a static QR code works
Every code on this site is static: the payload is written into the black and white modules themselves. Nothing is looked up when the code is read, no server of ours takes part, and no subscription holds the printed code up. The same property is the limit — once it is printed, what it contains cannot be changed.
Three things then decide whether a printed code reads: how many bytes the payload came to, which recovery level absorbs the damage, and how wide a single module ends up on paper. These guides work through each of them with the numbers.