Why Is My PDFMonkey Document Blank?
Last updated March 23, 2026
A blank document usually means PDFMonkey generated the document successfully, but the output contains no visible content. The most common cause is an unpublished template.
The template is not published
This is by far the most frequent cause. PDFMonkey templates have two versions of their content: a draft (what you edit) and a published version (what PDFMonkey uses to generate documents). If you have never clicked Publish, the published content is empty and every document generated from that template comes out blank.
How to fix it
- Open your template in the editor (Dashboard or Builder).
- Click the Publish button.
- Generate the document again.
Publish after every change
Conditional logic hides all content
If your template wraps content in conditional blocks, the output can be blank when the conditions are not met.
Code templates use Liquid syntax:
{% if items.size > 0 %}
<!-- content here -->
{% endif %}
If items is missing from the payload or is an empty array, nothing renders.
Builder templates use visibility rules on components. If a visibility condition evaluates to false for every component, the page appears empty.
How to fix it
- Compare the variable names in your conditions against the keys in your payload. A typo or casing mismatch (
Itemsvsitems) causes the condition to fail silently. - Test with the payload you are actually sending, not just the template’s sample data.
- Temporarily remove conditions to confirm the content renders without them, then add them back one at a time.
A JavaScript or expression error in a Builder template
Builder templates can break silently when they contain a runtime error. Two common scenarios:
- External JavaScript libraries or custom code in HTML blocks. If a script throws an uncaught error, rendering can stop and produce a blank document.
- Syntax errors in conditions or repetitions. A typo in a visibility condition or a repetition expression (for example a missing closing parenthesis or a misspelled variable) prevents the component from evaluating, which can result in an empty output.
How to fix it
- Open the template in the Builder and check the preview. If the preview itself is blank or broken, the error is in the template logic.
- Look at any HTML blocks that include
<script>tags. Try removing them temporarily to isolate the problem. - Review condition and repetition expressions on your components for typos or syntax mistakes.
- If you use external libraries loaded via a CDN URL, make sure the URL is correct and the library is accessible at generation time.
When debugging, strip the template down to its simplest form (static text, no scripts, no conditions) and confirm it generates correctly. Then add complexity back one piece at a time to find what breaks.
The payload is empty or missing
If you create a document without providing a payload (or with "payload": {}), any template variable evaluates to blank. When the template has no static content, the result is a blank document.
How to fix it
Make sure your API request includes a payload with the data your template expects:
{
"document": {
"document_template_id": "YOUR_TEMPLATE_ID",
"status": "pending",
"payload": {
"name": "Jane Doe",
"items": [{ "description": "Widget", "price": 9.99 }]
}
}
}
See My Data Is Not Showing Up for more on payload/template variable mismatches.
CSS hides the content
CSS rules can make content invisible without removing it from the HTML. Common culprits:
display: noneorvisibility: hiddenon a wrapper element- White (or transparent) text on a white background
opacity: 0on a container- An element positioned off-page with
position: absoluteand large negative offsets
How to fix it
- Open the template editor and check the CSS tab for rules that might hide content.
- Use the live preview to verify that content appears as expected.
- If you use conditional CSS classes, confirm the payload data triggers the correct class.
Frequently asked questions
I can see content in the preview but the generated document is blank.
The preview uses the draft version of your template, while generation uses the published version. Click Publish in the template editor and generate again.
I published my template, but only the old content appears.
You likely edited the template after publishing. Each time you change the draft, you need to click Publish again to push those changes to the published version.
My Builder template generates a blank document even though the preview looks fine.
Check that you have published the template from the Dashboard (not just saved in the Builder). Also verify that any visibility rules on your components evaluate correctly with the payload you are sending via the API.
Related pages
- From Zero to Your First Document — end-to-end template and document creation walkthrough
- Dashboard UI Tour — where to find the Publish button and editor tabs
- My Data Is Not Showing Up — fix payload/variable mismatches
- Document Statuses and Lifecycle — understand draft, pending, and other statuses
- Templates API: Draft vs. Published Properties — how draft and published fields relate in the API
Frequently asked questions
- Why is my PDFMonkey document blank?
- The most common cause is an unpublished template. PDFMonkey uses the published version of a template to generate documents. If you have never clicked Publish, the published content is empty and the document comes out blank.
- How do I publish a template in PDFMonkey?
- Open your template in the editor and click the Publish button. This copies the draft content (HTML, CSS, settings) to the published version that PDFMonkey uses for document generation. You need to publish again after every change you want to appear in generated documents.
- My template is published but the document is still blank. What else could be wrong?
- Other causes include: conditional logic (Liquid if/unless blocks or Builder visibility rules) that hides all content when the payload data does not match; JavaScript errors or syntax mistakes in Builder conditions and repetitions; an empty or missing payload; CSS rules like display:none or visibility:hidden that hide content; or white text on a white background.