QR Codes
Last updated March 23, 2026
The builder includes a dedicated QR Code block for embedding QR codes directly in your templates. You can encode static text or URLs, bind the content to a dynamic data variable, customize colors and dot styles, and even add a centered logo.
Adding a QR Code block
QR Code is in the Extra category of the Blocks panel. Drag it onto the canvas or click it to add it inside the currently selected container.

Once added, the QR code renders immediately in the canvas using its default settings. Select the block to configure it in the right panel.
QR Code settings
Select a QR Code block and open the Settings tab in the right panel to access all configuration options.
Content
The Content field defines the text or URL encoded in the QR code. You can type a static value (such as https://example.com) or bind it to a data variable from your payload.
To use dynamic content, click the variable browser button next to the field and select a property from your test data — for example, invoice.paymentUrl. The QR code updates in real time as you change the test data.
Size
The Size setting controls the width and height of the QR code in pixels. Both dimensions are always equal since QR codes are square.
Colors
- Foreground color — the color of the QR code dots (default: black).
- Background color — the color behind the dots (default: white).
You can use any valid color value. High contrast between foreground and background is important for scannability.
Reliability level
The reliability level sets the error correction capacity of the QR code:
| Level | Name | Recovery capacity |
|---|---|---|
| L | Low | ~7% |
| M | Medium | ~15% |
| Q | Quartile | ~25% |
| H | High | ~30% |
Higher levels make the code more resilient to damage or partial obstruction, but produce denser (more complex) patterns. If you plan to add a logo in the center of the QR code, use Q or H so the code remains scannable even though the logo covers part of it.
Dot style
The dot style changes the shape of individual modules in the QR code:
- Square — standard rectangular modules (default)
- Dots — circular dots
- Rounded — rounded rectangles
- Extra-rounded — more pronounced rounding
- Classy — stylized square variant
- Classy-rounded — stylized with rounded corners
Corner style
The corner style affects the three large positioning squares at the corners of the QR code:
- Square — standard square corners (default)
- Dot — circular corners
- Extra-rounded — rounded corners
Mixing dot and corner styles lets you match the QR code to your brand aesthetic while keeping it scannable.
Logo URL
The Logo URL field lets you place an image in the center of the QR code. Enter a direct URL to a PNG or SVG image, or bind the field to a data variable for dynamic logos.
Dynamic QR codes
For documents generated with different data, bind both the Content and Logo URL fields to variables from your payload. Each generated document will produce a unique QR code based on its data.
For example, if your payload includes:
{
"ticket": {
"checkInUrl": "https://example.com/checkin/abc123",
"eventLogo": "https://example.com/logos/event.png"
}
}
Bind the Content field to ticket.checkInUrl and the Logo URL to ticket.eventLogo. Every document gets a scannable QR code pointing to its own check-in URL, branded with the event logo.

Frequently asked questions
- How do I add a QR code to a PDFMonkey template?
- Drag a QR Code block from the Extra category of the Blocks panel onto the canvas. Configure the Content field with a static URL or bind it to a data variable. You can also customize size, colors, dot style, corner style, and add a centered logo.
- Can I generate dynamic QR codes in PDFMonkey?
- Yes. Bind the Content and Logo URL fields to variables from your document payload. Each generated document will produce a unique QR code based on its data—for example, a unique check-in URL per event ticket.
- What error correction level should I use for QR codes with a logo?
- Use Quartile (Q) or High (H) error correction when adding a logo. The logo physically covers QR code modules, and higher error correction ensures the code remains scannable despite the obstruction.