How to print a sheet of identical QR codes
There is a whole category of QR code job that has nothing to do with bulk data: one URL, printed many times. A menu code for every table in a restaurant. A review link for a stack of receipts. A wifi code for each room. A feedback form on the bottom of a hundred flyers.
The usual approach is to generate one code, drop it into a Word document, and copy-paste it into a grid by hand — which is tedious and produces wildly inconsistent spacing. The generator on this site has a copies field for exactly this.
The short version
- Open the generator and switch to the Enter manually tab.
- Paste your URL into the first row.
- Set Copies to how many you want on the sheet — say 20.
- Set QR codes per image to the same number, 20.
- Generate. You get one PNG containing a 5 × 4 grid of that code.
Why both numbers
The two settings do different jobs, and understanding the split is what makes the tool flexible:
- Copies controls how many QR codes exist. Twenty copies means twenty codes in the batch.
- QR codes per image controls how they are packed onto pages. Twenty per image puts all twenty on one sheet; ten per image would give you two sheets of ten.
So if you want two pages of twenty, set copies to 40 and codes per image to 20. If you want twenty separate image files of the same code — occasionally useful when a design tool wants individual assets — set copies to 20 and leave codes per image at 1.
Choosing a grid that matches your paper
Codes are arranged in as close to a square as the count allows: the layout uses the square root of the number of codes, rounded up, as the column count. In practice:
| Codes per image | Grid | Typical use |
|---|---|---|
| 4 | 2 × 2 | Large table tents, window signs |
| 6 | 3 × 2 | Half-page handouts |
| 9 | 3 × 3 | Postcard-sized cuts |
| 12 | 4 × 3 | Standard label sheets |
| 20 | 5 × 4 | Small stickers, receipt inserts |
| 30 | 6 × 5 | Shelf-edge labels |
Each cell is 300 × 300 pixels, plus a 44-pixel strip underneath for the label if labels are on. A 20-code sheet is therefore 1500 × 1376 pixels, which prints crisply at A4 or US Letter.
Labels: on or off
When more than one code goes on an image, a checkbox appears: "Print a label under each QR code". It is on by default, and it prints the row's filename underneath each code — or the URL itself if you did not give the row a name.
For a sheet of identical codes, labels are usually the wrong choice. Every cell would carry the same text, which wastes space and looks odd on a table tent. Untick it and the label strip disappears entirely rather than being left blank — a 20-code sheet drops from 1376 to 1200 pixels tall.
Leave labels on when the sheet has different codes on it, which is the case covered in generating codes in bulk from a CSV. There, the label is the only thing that tells you which cut-out square is which.
Mixing repeats and unique codes
Copies are set per row, so a single batch can contain both. A restaurant might want ten copies of the menu code and one code per table:
| URL | Filename | Copies |
|---|---|---|
| https://example.com/menu | menu | 10 |
| https://example.com/table/1 | table-01 | 1 |
| https://example.com/table/2 | table-02 | 1 |
With one code per image that produces twelve files:
menu.png, menu_2.png through
menu_10.png, then table_01.png and
table_02.png. The numeric suffixes come from the duplicate
handling, which keeps every copy as its own file instead of overwriting.
Printing the sheet
The output is a PNG inside the downloaded ZIP. Extract it and print it directly from your image viewer, or drop it into a document if you need margins and crop marks.
Three things worth getting right:
- Print at 100%, not "fit to page" if you care about the finished size. Scaling is safe for QR codes — they are pure black and white — but "fit to page" quietly changes your cut dimensions.
- Keep the quiet zone. The generated codes already include the required white margin around the pattern. Do not crop tightly to the black edge when cutting; scanners need that white border to find the code.
- Black on white, matte if possible. Glossy stock throws glare that defeats phone cameras at close range.
How small can they go?
The practical floor for a phone camera is around 2 cm (0.8 in) square for a short URL scanned at arm's length. Longer URLs pack more modules into the same square, making each module smaller, so a long tracking URL needs a physically larger code than a short one. Sizing for print has the full distance-to-size arithmetic, and combining different codes on one sheet covers the case where each code on the page points somewhere different.
The rule of thumb used in signage is that the code should be about a tenth of the scanning distance: readable from 1 metre means roughly 10 cm square. If your codes will be scanned from across a room, generate fewer per image so each one prints larger.
Shortening the URL is the cheapest way to make a code more scannable. A
code encoding https://ex.co/m has far fewer modules — and
therefore much chunkier, more forgiving squares — than one encoding a URL
with a long query string attached.
Always scan-test one printed code at the real size, on the real paper, under the lighting where it will live. A code that scans perfectly on a monitor can fail on matte recycled stock in a dim corridor.