Free PDF tool
Convert JSON to PDF
Paste an API response or open a .json file. Lists of records become a table, nested objects a structured outline, and syntax errors are reported with line and column.
Your files stay on your device
- Free, no account needed
- Built on pdf-lib
Paste, type, open a file or drop one onto the editor. The example shows what the tool does.
How it works
Convert JSON to PDF in 4 steps
- 1
Add the JSON
Paste it into the editor or open a .json file.
- 2
Choose the layout
Auto picks a table for lists of records and an outline for everything else; Formatted JSON prints the code.
- 3
Create the PDF
Select Create PDF. Errors are shown with line and column.
- 4
Download
Save the PDF.
Questions
Frequently asked questions
Are my files uploaded to a server?
No. The tool runs entirely in your browser: your files are read and converted on your device, and their contents are never sent to our servers.
How is the layout chosen?
Auto shows a list of objects as a table, with one column per key. Everything else becomes an outline: keys in bold, nested objects as sections. Formatted JSON prints the data with indentation, like a code editor.
What if my JSON is invalid?
The tool shows the line and column of the first error, so you can find the missing comma, quote or bracket.
Which characters are supported?
The browser tool uses the standard PDF fonts, which cover Latin characters (Windows-1252), so no font files need to be downloaded. Other characters, such as Chinese or emoji, are replaced by a question mark and the tool tells you how many. The API embeds full Unicode fonts.
Automate it
Do the same in your application with Dynamic Document API
The API takes JSON as template data: design the document once in HTML or the visual editor, then send JSON and receive the finished PDF — invoices, reports, certificates.
POST /v1/pdf/from-templateAvailablecurl -X POST https://api-eu.dynamicdocumentapi.com/v1/pdf/from-template \
-H "Authorization: Bearer $DYNAMIC_DOCUMENT_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"template_id": "tpl_01J9ZR3M5P7Q9S1T3V5X7Z9B1D",
"data": {
"customer": {
"name": "Acme Inc."
},
"items": [
{
"description": "Consulting",
"amount": 1200
}
]
}
}'const response = await fetch("https://api-eu.dynamicdocumentapi.com/v1/pdf/from-template", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DYNAMIC_DOCUMENT_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
"template_id": "tpl_01J9ZR3M5P7Q9S1T3V5X7Z9B1D",
"data": {
"customer": {
"name": "Acme Inc."
},
"items": [
{
"description": "Consulting",
"amount": 1200
}
]
}
}),
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const result = await response.json();
console.log(result);import os
import uuid
import requests
response = requests.post(
"https://api-eu.dynamicdocumentapi.com/v1/pdf/from-template",
headers={
"Authorization": f"Bearer {os.environ['DYNAMIC_DOCUMENT_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"template_id": "tpl_01J9ZR3M5P7Q9S1T3V5X7Z9B1D",
"data": {
"customer": {
"name": "Acme Inc.",
},
"items": [
{
"description": "Consulting",
"amount": 1200,
},
],
},
},
timeout=90,
)
response.raise_for_status()
print(response.json())