Vector QR codes straight in InDesign, in your document colours, with or without
a logo — one at a time, or hundreds at once from an Excel sheet. Every code is
checked by a scanner before it lands on the page.
Runs on InDesign 18.5 and newerSystem Windows and macOS, one installVersion 1.0.0Line Zalesky Workflow
Getting started
Installing is a double click. The panel then lives in the Plug-Ins menu.
Installing
Quit InDesign.
Double click the .ccx file. Creative Cloud installs it for you.
Start InDesign.
Where to find it
Plug-Ins → Zalesky Workflow → QR Generator Plus opens the panel.
The panel docks or floats like any other InDesign panel, and InDesign
remembers its size and place.
Your first QR in ten seconds
Open a document, type a web address into Website URL and click
Create QR. A 35 mm black QR lands in the middle of the active
page, on a layer called QR codes. One Ctrl+Z
takes it away again.
The panel
A preview on top, five tabs, two buttons at the bottom.
123456
The panel in InDesign's dark theme. These are real screenshots of the panel.
1Load selected — reads the selected QR back into the panel
2Live preview — exactly what will be placed
3Module count, margin, status and warnings
4Tabs: Content, Style, Logo, Place, Batch
5The settings of the active tab
6Create QR and Update selected
The preview and the scan check
Every change redraws the preview within a tenth of a second. The panel then
reads the preview with a QR decoder, exactly like a phone would. Only when the
decoded text matches what you typed does it say
Ready — automatic scan check passed, and only then can you click
Create QR.
The check catches the real mistakes: a logo that covers too much, a colour
with too little contrast, a QR colour identical to the background.
The scan check is not a print proof
It proves the code is readable on screen. Paper, size, ink and varnish can
still spoil it. Scan a printed proof with a phone before a big run —
especially when there is a logo in the middle.
Content: QR types
Choose what the code does, fill in the fields.
QR type at the top of the Content tab decides which fields appear
below it. Required fields are marked with *. The grey text inside an
empty field is only an example — it is never used.
Czech QR payment: the fields of QR Platba, read by every Czech banking app.
Wi-Fi: phones join the network without typing the password.
QR type
What the phone does
Website URL
Opens the web page.
Plain text
Shows the text; it can be copied.
Business card (vCard)
Offers to save a full contact: name, company, phones, e-mail, web, address.
Compact contact (MECard)
Saves a short contact. Makes a smaller, less dense code than vCard.
Email
Opens a new e-mail with the recipient, subject and message filled in.
Phone call
Offers to call the number.
SMS
Opens a text message to the number, with the message prepared.
Wi-Fi
Joins the Wi-Fi network without typing the password.
Location
Opens the place in the map app.
Calendar event
Adds the event to the calendar.
WhatsApp
Opens a WhatsApp chat with the number and the message prepared.
FaceTime
Starts a FaceTime call (Apple devices).
Czech QR payment
Czech banking apps fill in the payment (QR Platba / SPD).
When something is missing
Click Create QR with a required field empty and the panel jumps to the
Content tab, marks every missing field in red and puts the cursor into the
first one. The status line says what is wrong in plain words — an invalid
e-mail, an IBAN with a wrong checksum, an event that ends before it starts.
Missing required fields are marked in red.
Switching types keeps what you typed
Every type remembers its own fields while the panel is open. Switch from
vCard to Wi-Fi and back and the contact is still there.
Formats worth knowing
Web addresses must start with http:// or https://.
Phone numbers with the country code; spaces, dashes and brackets are fine: +420 777 123 456.
Dates as 2026-10-15 or 15.10.2026, with time 2026-10-15 09:00 or 15.10.2026 9:00.
Czech QR payment needs a Czech IBAN (CZ + 22 digits). The panel checks its checksum.
Style: colours and size
Document swatches, any unit, a safe margin.
Setting
What it does
QR color
Colour of the dark modules. The list shows the swatches of the active document — spot colours included — so the QR prints on the plate you expect.
Background
The square behind the code. None makes it transparent; the panel then warns that readability depends on what is underneath.
Size + unit
The outer size of the square, margin included. Millimetres, centimetres, points, picas, inches or pixels.
Margin + unit
The quiet zone inside the square — the empty border a scanner needs.
The 4-module minimum
A scanner needs an empty border at least four modules wide. InDesign always
keeps it, so when your margin is smaller the real one is shown next to the
preview, for example margin 4.24 mm (4-module minimum). That is
information, not an error.
Added a new swatch to the document? Click Refresh document swatches on
the Place tab. The panel also refreshes by itself whenever you switch documents.
Logo
Artwork in the middle, from a file or from the page.
Control
What it does
Choose file…
PNG, JPG, SVG, PDF, AI, EPS, PSD or TIFF. The file is embedded in the QR, so the QR does not depend on a link.
Use selection
Uses a copy of the object selected in the document — a logo you already have on the page, a group, a frame with a picture.
Remove
Back to a QR without artwork.
Size (%)
Logo width as a percentage of the QR width, up to 14 %.
Padding
Empty space around the logo, in the margin unit. Logo and padding together may take at most 18 % of the QR width.
Artwork frame fill
The colour of the square behind the logo — usually Paper.
With a logo the QR switches to the highest error correction, so it can lose
the covered modules and still scan. That makes the code denser — a long web
address with a logo can get too big to read comfortably at small sizes.
Place and presets
Where the QR goes, and settings you use again.
Insert into
Option
Result
Center of active page
A new square frame of the chosen size in the middle of the page you are looking at, on the QR codes layer.
Selected graphic frame
The QR goes into the empty graphic frame you selected. The frame keeps its size and position; the QR stays square and centred, so its size is the shorter side of the frame and the Size field is locked.
Select an empty graphic frame and the panel switches to Selected graphic
frame by itself. Draw placeholders in your layout first, then fill them one
by one. The frame must not be rotated or sheared, and neither the frame nor its
layer may be locked.
Presets
Set up a QR the way you want it.
Type a name into Preset name and click Save current.
Later choose it in Saved preset and click Apply.
A preset stores the QR type and its content, the swatch names, size and margin,
the logo settings and a logo file. A logo taken from a selected object
cannot be stored — choose it again after applying. Saving under an existing name
overwrites it. Presets live in the panel on your computer, not in the document.
Create and update
One click to place, one click to change, one Undo either way.
What lands in the document
A square graphic frame. Inside it: the background square, InDesign's own
vector QR code and, if you use one, the logo on its padded square. Everything
is vector, uses your swatches and separates correctly.
The frame also carries the complete settings it was made with, invisible.
That is what lets the panel open it again later.
Changing an existing QR Plus
Select the QR frame.
Click Load selected. The type, content, colours, margin and logo come back into the panel.
Change what you need.
Click Update selected.
The QR is rebuilt in the same frame, at the same place and size. The embedded
logo is kept even if the original file is gone. One Ctrl+Z
returns the previous version.
Nothing half-done
The new QR is built completely before the old one is removed. When anything
fails on the way — a missing swatch, a locked layer — the document stays
exactly as it was and the status line says why.
InDesign's own QR codes
Codes made with Object → Generate QR Code can be read and upgraded too.
Documents often contain QR codes made with InDesign's built-in
Object → Generate QR Code…. The panel can read them: select the frame
and click Load selected.
1 · SelectA frame with a QR code made by InDesign.
2 · Load selectedThe panel scans the code and fills in its content.
3 · EditChange the address, colour, margin, add a logo.
4 · Update selectedThe frame now holds a QR Plus.
A native InDesign QR read back into the panel.
What is read
The content. A web address opens as Website URL; anything else opens as Plain text with the exact text of the code, so the new QR encodes the same thing.
The colour. The panel measures the colour of the code and picks the nearest document swatch.
The size. Taken from the frame; the new QR fills the same frame.
From then on it is an ordinary QR Plus: Load selected brings back all
its settings next time.
It has to be readable
The code is read from a rendered image, just like a phone reads it. A QR that
is cropped, rotated, covered or printed too pale may not be recognised — the
status line then says the graphic does not contain a readable QR code.
Batch generation
Hundreds of QR codes from one Excel sheet, laid out on new pages.
The Batch tab turns every row of a spreadsheet into one QR code and lays
them out in a grid — or one per page — on pages added to the end of the
document. Colours, margin and logo come from the Style and Logo tabs, so set up
one QR the way you like it first.
The whole job in six steps
Set the look on the Style and Logo tabs.
On the Batch tab click Save template… and save an Excel file. Fill it in (see below).
Click Choose CSV or Excel… and pick your file. It is checked right away.
Tick Preview layout on the active page (above the buttons at the bottom) and adjust size, gaps and captions until the page looks right.
Click Preflight. Fix any rows it reports.
Click Create batch.
12345
On the Batch tab the preview at the top only reminds you where the content comes from.
1Your file, and Save template…
2The layout preview switch — always visible above the buttons
3Data — type, duplicates, prefix and suffix
4Caption — text under each QR
5Preflight and Create batch
Data
Setting
What it does
QR type for rows without “type”
The QR type used by every row whose type cell is empty — or by all rows when the file has no type column. A file with nothing but web addresses needs just a url column and Website URL here.
Duplicates
Keep all — every row becomes a QR. Skip repeated rows — a row identical to an earlier one is left out. Create once per QR content — rows that produce the same code are made only once, even if their captions differ.
Content prefix / suffix
Text added before and after the first field of every row — for a URL type, the address. With the prefix https://example-shop.cz/p/ the spreadsheet only needs A123 and the QR opens https://example-shop.cz/p/A123. A suffix like ?utm_source=leaflet tags every link.
Tokens
Prefixes and suffixes — also those of the caption — may contain tokens:
Token
Becomes
Example
{row}
Number of the data row: 1, 2, 3…
?id={row} → ?id=7
{0001}
The same number padded with zeros to the width you write
K{0001} → K0007
{page}
Number of the batch page the QR lands on: 1, 2, 3…
Sheet {page} → Sheet 2
The spreadsheet
First row the column names, then one row per QR.
The simplest file possible: a column url with web addresses and a
column label with the text for under the code.
A
B
1
url
label
2
https://example-shop.cz/p/chair-oslo
Chair Oslo
3
https://example-shop.cz/p/table-bergen
Table Bergen
4
https://example-shop.cz/p/lamp-malmo
Lamp Malmö
Three QR codes, each with its caption. QR type for rows without “type”: Website URL, Caption text from column: label.
One file can mix every QR type. Add a type column and fill in, for
each row, only the columns that type uses:
A
B
C
D
E
F
G
1
type
label
url
phone
ssid
password
iban
2
url
Our shop
https://example-shop.cz
3
phone
Call us
+420 777 123 456
4
wifi
Guest Wi-Fi
Studio Guest
Welcome2026
5
payment
Pay the invoice
CZ58 5500 0000 0012 6509 8001
6
Spring sale
https://example-shop.cz/sale
Row 6 has no type, so it uses QR type for rows without “type”. Grey cells are ignored for that row.
The template
Don't start from an empty sheet. Save template… on the Batch tab writes a
file with one example row for every QR type and every column there is.
Save it as .xlsx (recommended) or .csv.
Sheet
What is in it
Data
The example rows. This is the only sheet the panel reads. Delete the rows you don't need, keep the columns you do, fill in your own.
Columns
Every column: what it means, which types use it, where it is required, the format.
Types
Every value for the type column with its required and optional columns.
Rules
The first row holds the column names. Case, spaces and dashes don't matter: workPhone, Work phone and work-phone are the same column. The field names shown in the panel work too — Website URL, Mobile phone.
One row = one QR. Empty rows are skipped. At most 500 rows.
Only the first sheet is read. Keep notes on other sheets.
Column order doesn't matter, and extra columns — prices, internal codes — are simply ignored, unless you use one for the captions.
The type column takes the short value from the table below (url, wifi…) or the full name (Czech QR payment).
The content column is a shortcut: it fills the one field of the types url, text, phone and facetime.
Values
Dates — 2026-10-15 or 15.10.2026; with time 2026-10-15 09:00 or 15.10.2026 9:00. Real Excel date cells work as well.
Decimals — 480.50 or 480,50.
Phone numbers, symbols, IBANs — keep them as text in Excel, otherwise Excel drops the + and leading zeros (0308 becomes 308). The template's Data sheet is already formatted as text.
CSV — comma or semicolon separated, as Czech Excel saves it. Save as CSV UTF-8 so accents survive.
The same list as the Columns sheet of the template.
Several types share a column: phone is the number of a phone call,
an SMS, WhatsApp, FaceTime and the mobile of a vCard. title is a job
title in a vCard and the name of a calendar event. The type of the
row decides which meaning applies.
Column
Meaning
Used by
Required in
Format
type
QR type
all
—
QR type of the row (see the Types sheet). Empty = “QR type for rows without type” in the Batch tab.
label
Caption
all
—
Caption text under the QR. Type “label” into “Caption text from column” in the Batch tab to use it.
url
Website URL / Website
urlvcardmecard
url
Full address starting with http:// or https://.
text
Text
text
text
Any text. Line breaks are kept.
first
First name
vcardmecard
vcardmecard
last
Last name
vcardmecard
vcardmecard
company
Company
vcard
—
title
Job title / Event title
vcardevent
event
vCard: job title. Calendar event: event title.
phone
Mobile phone / Phone / Phone number
vcardmecardphonesmswhatsappfacetime
phonesmswhatsappfacetime
Digits with country code, spaces allowed: +420 777 123 456.
workPhone
Work phone
vcard
—
Digits with country code, spaces allowed.
email
Email / Recipient
vcardmecardemail
email
name@domain.tld
street
Street
vcard
—
city
City
vcard
—
region
State / region
vcard
—
postal
Postal code
vcard
—
country
Country
vcard
—
note
Note
vcardmecard
—
Free text.
subject
Subject
email
—
body
Message
emailsmswhatsapp
—
Message text (email body, SMS or WhatsApp message).
ssid
Network name (SSID)
wifi
wifi
security
Security
wifi
—
WPA, WEP or nopass (open network). Empty = WPA.
password
Password
wifi
—
Required unless security is nopass.
hidden
Hidden network
wifi
—
true or false. Empty = false.
lat
Latitude
geo
geo
Decimal degrees, −90 to 90: 50.0755
lon
Longitude
geo
geo
Decimal degrees, −180 to 180: 14.4378
start
Start (local time)
event
event
YYYY-MM-DD HH:MM or D.M.YYYY H:MM (local time).
end
End (local time)
event
event
Same format as start; must be later than start.
location
Location
event
—
description
Description
event
—
iban
IBAN
payment
payment
Czech IBAN: CZ + 22 digits, spaces allowed.
amount
Amount (optional)
payment
—
0.01–9999999.99, decimal point or comma. Empty = payer fills it in.
currency
Currency
payment
—
CZK, EUR, USD, GBP, CHF or PLN. Empty = CZK.
recipient
Recipient
payment
—
Max. 35 characters.
vs
Variable symbol
payment
—
Variable symbol, 1–10 digits.
ss
Specific symbol
payment
—
Specific symbol, 1–10 digits.
ks
Constant symbol
payment
—
Constant symbol, 1–10 digits.
due
Due date
payment
—
YYYY-MM-DD or D.M.YYYY.
message
Message
payment
—
Max. 60 characters.
Layout and preview
How the codes are arranged on the page — and seeing it before it happens.
Order “Left to right, then down”. With “Top to bottom, then right” the numbers run down the columns.
Setting
What it does
Mode
Side by side — as many codes per page as fit. One QR per page — a page per code: labels, tickets, cards.
Page area
Where the codes may go: inside the document margins, the full page, or custom insets from the four page edges.
QR size, Unit
Size of every code. The unit applies to all distances on this tab.
Horizontal / Vertical gap
Space between the codes. The vertical gap is measured from the bottom of a caption to the top of the next code.
Grid
Automatic fits as many columns and rows as the page area holds. Fixed rows/columns uses your Columns and Rows — the panel tells you if they don't fit.
Order
Rows of the spreadsheet fill the grid left to right, or top to bottom.
One/page alignment
With one QR per page: in the middle of the page, or in the middle of the page area.
Parent page
The parent (master) page applied to the new pages.
A greyed-out field says in its label what switches it on: Columns — Grid:
Fixed means choose Fixed rows/columns under Grid and the
field opens; Caption height — needs caption column means fill in
Caption text from column first.
The grid starts in the top left corner of the page area. The size of the page
you are looking at is used for the calculation, and the new pages are added at
the end of the document.
Preview layout on the active page
Tick the switch just above the Preflight and Create batch buttons — it is always in view — and the panel draws the layout
right on the page you are looking at: numbered squares where the codes will be,
and the captions under them — with the real texts from your file and your
caption styles. Change a gap or the size and the preview follows within a
moment. Go to another page and it moves with you.
Only one page is drawn, however long the spreadsheet — the status line tells you how many pages the whole batch will need.
It lives on its own layer QR preview, which does not print or export.
It disappears when you untick the switch, when you click Create batch and when you close the panel.
An impossible layout — a grid too big for the page — shows as a message instead of a preview.
Undo history
Every redraw of the preview is a change of the document, so it appears in
the Undo history. Just untick the switch when you are done — the preview
layer is removed with it.
Captions and layers
Text under every code, on its own layer.
Caption text from column
Type the name of a spreadsheet column into this field — not a text. With
label in the field, the text of the label cell of
each row is printed under its code. The column can be called anything: type
product_name and that column is used. Leave the field empty and
no captions are made.
Setting
What it does
Caption prefix / suffix
Text before and after the caption. Prefix Code: turns A123 into Code: A123. Tokens work here too.
Caption height
Height of the caption text frame; it is as wide as the QR.
Gap under QR
Space between the code and its caption.
Group each QR with its caption
Each code and its caption become one group, so they move together.
Layers
The layers are created when first needed, and reused afterwards.
QR codes — every code the panel places on a page, one at a time or in a batch.
QR captions — the batch captions, directly below QR codes. Hide or lock the captions separately, or give them their own colour.
With Group each QR with its caption the pair is one group and the group sits in QR codes — InDesign always puts a group on the layer of its topmost member.
A locked layer is unlocked just for the placing and locked again afterwards.
Load selected and Update selected work on a grouped pair too —
select the group and the panel works with the code inside it.
Styles
QR object style, Logo object style, Caption object style
and Caption paragraph style list the styles of the active document.
Everything the batch makes gets them — so a caption font, a text wrap or a
frame inset is set once in a style and the whole batch follows. The preview
uses the caption styles as well.
Preflight and Create batch
Every row is checked before anything is placed.
Preflight reads the file again, builds every code in memory and scans
it. Nothing is added to the document. The report lists:
Rows in the file, Valid codes, Duplicates skipped and Errors,
Pages the batch needs and the Grid per page,
the first five problems, each with its row number — the same number Excel shows on the left, so Row 7 is row 7 in Excel.
Create batch runs the same check first and refuses to start while any
row has an error. Fix the file, save it, click Preflight again — the
panel always reads the current version of the file.
Then it adds the pages at the end of the document and places the codes one
after another; the status line counts them. Each code can be undone on its
own, and each one is a full QR Plus: Load selected and
Update selected work on it like on any other.
Menu and licence
A 14-day trial, then one key from Gumroad.
The panel menu
Click the ≡ icon in the top right corner of the panel's tab — the
same menu every InDesign panel has. It holds:
Item
What it does
Licence…
Trial days left, activating your key, buying the full version.
Manual (English)
Opens this manual in your browser. It ships inside the plugin and works offline.
Manuál (česky)
The Czech manual.
The trial
For 14 days from the first start everything works. The days left show in
the panel header — click that label to open the licence window.
After the trial the panel still shows the preview, runs the scan check,
Load selected, Preflight, the layout preview and the
templates. Create QR, Update selected and Create batch
then ask for a licence. QR codes you have already placed never expire —
they are ordinary InDesign objects.
The licence window, opened from the panel menu or from the trial label in the header.
Buying and activating
In the licence window click Buy the full version. The Gumroad page opens in your browser.
After paying, the licence key is in the Gumroad receipt and in your Gumroad library.
Paste the whole key into Gumroad licence key and click Activate.
The key is checked with Gumroad over the internet. Once confirmed, the
plugin works without internet for 30 days at a time and re-checks itself
about once a day when online. There is nothing else to download: the trial
and the full version are the same plugin.
A new computer
Install the same .ccx and paste the same key. There is nothing
to deactivate on the old machine.
When something goes wrong
The things that happen, and what to do.
The panel is not in the Plug-Ins menu
Check your InDesign version — it must be 18.5 or newer. Then quit InDesign, install the .ccx again and start it.
The key is not accepted
Check that you pasted the whole key and that it is the key for QR Generator Plus — every plugin in the line has its own. Without internet the key cannot be checked; it is kept and confirmed automatically once you are online.
Create QR stays grey
Read the status line under the preview: a required field is empty, a value has the wrong format, or the automatic scan check failed. For a failed check raise the contrast, enlarge the margin or make the logo smaller.
“Select an empty graphic frame”
Insert into is set to Selected graphic frame and the selected frame already holds something. Select an empty frame, or switch to Center of active page. To change a QR that already exists, use Load selected and Update selected.
Load selected says the graphic does not contain a readable QR code
The frame holds something that is not a QR, or a QR that cannot be read — cropped by the frame, rotated, covered by other objects or too pale. Fit the content to the frame and try again.
“Missing document swatch” or “Missing object style”
The QR, a preset or the batch refers to a swatch or style the active document does not have — typical after switching documents. Pick the colour or style again, or add it to the document.
Preflight reports errors in rows I did not touch
Usually Excel changed the values: a phone number lost its +, a symbol its leading zero, a web address got cut. Format those columns as Text and type the values again — or start from the template, which is formatted already.
Accents in a CSV look wrong
The file was saved in an old encoding. In Excel use File → Save As → CSV UTF-8, or save as .xlsx instead.
“The QR grid does not fit inside the selected page area”
The codes plus captions are larger than the page area. Make the QR smaller, the gaps or the caption smaller, use fewer fixed rows and columns — or a bigger page area. With the preview switched on you see the result immediately.
A QR preview layer stayed in the document
It does not print or export. Tick and untick the preview switch to remove it, or delete the layer in the Layers panel.