n8n-nodes-json-to-pdf
v1.1.1
Published
Convert Markdown/JSON into PDF (single document or e-book) for n8n
Maintainers
Readme
JSON to PDF
A versatile n8n community node that converts JSON payloads (with Markdown formatting) into styled PDF documents—either a single PDF or a full e-book with chapters and table of contents. No external services required.
🚀 Features
Two operation modes:
- Single PDF: treat a JSON field as Markdown text, split on a keyword to insert page breaks.
- Generate E-book: treat a JSON field as an array of
{ title, content }chapters, auto-generate a title page, table of contents with links, and chapter formatting.
Custom typography:
- Choose any PDF font (Helvetica, Times-Roman, Courier, etc.).
- Adjust base font size and line spacing.
Page control:
- In Single PDF mode, specify a “page break keyword” (e.g.
## Chapter) which, when encountered at the start of a line, forces a new page. - In E-book mode, control whether each chapter title appears on its own page or inline.
- In Single PDF mode, specify a “page break keyword” (e.g.
Table of Contents (E-book only):
- Optionally include a TOC with clickable links to each chapter.
- Customize the TOC title.
Error handling:
- Clear error messages when the JSON field isn’t the expected type.
- Detailed stack traces available in the n8n execution log.
📦 Installation
- In your n8n instance, open Settings → Community Nodes → Install
- In npm Package Name enter:
n8n-nodes-free-web-scrapping
- Click Install and restart n8n if prompted.
⚙️ Node Configuration
Operation
| Parameter | Description |
| ----------- | -------------------------------------------------------------------------------------------------------------------- |
| operation | single: render one PDF from a Markdown string. ebook: render an entire e-book from an array of chapters. |
Common Parameters
| Parameter | Type | Default | Description |
| ------------- | ------ | ----------- | ------------------------------------------------------------------------------------ |
| jsonField | string | data | JSON field that holds either the Markdown string (single) or chapters array (ebook). |
| font | string | Helvetica | PDF font name. |
| fontSize | number | 12 | Base font size (points). |
| lineSpacing | number | 1.15 | Line height multiplier. |
Single PDF Mode
| Parameter | Type | Default | Description |
| -------------- | ------ | ------------ | -------------------------------------------------- |
| pageBreakKey | string | ## Chapter | Lines starting with this keyword force a new page. |
Example JSON input for “single” mode:
{
"data": "# Introduction\nThis is text.\n## Chapter 1\nFirst chapter content...\n## Chapter 2\nSecond chapter content..."
}- Output: one PDF, with page breaks at each
## Chapter.
Generate E-book Mode
| Parameter | Type | Default | Description |
| ------------------- | ------- | ------------------- | -------------------------------------------------------------------------- |
| includeToc | boolean | true | Whether to add a “Table of Contents” page. |
| tocTitle | string | Table of Contents | Title text for the TOC page. |
| chapterTitleStyle | options | newPage | newPage: each chapter title on its own page. inline: title inline. |
Expected JSON structure:
{
"title": "My Great E-Book",
"data": [
{ "title": "Chapter 1: Getting Started", "content": "## Hello\nThis is **bold** text..." },
{ "title": "Chapter 2: Advanced Topics", "content": "More _Markdown_ here..." }
]
}The node will:
- Insert a title page.
- Optionally generate a TOC with links to each chapter.
- Iterate each chapter, adding titles and content.
🛠️ Examples
Example 1: Single PDF
- Operation:
single - JSON Field:
data - Page Break Keyword:
## PART
Input JSON:
{
"data": "# Welcome\nSome intro text.\n## PART One\nContent of part one.\n## PART Two\nContent of part two."
}Result: PDF with three pages:
- Page 1: “Welcome” + intro
- Page 2: “PART One” content
- Page 3: “PART Two” content
Example 2: Generate E-book
- Operation:
ebook - JSON Field:
data - Include TOC:
true - Chapter Title Style:
newPage
Input JSON (inbound to the node):
{
"title": "My Guide",
"data": [
{
"title": "Chapter 1: Beginnings",
"content": "This is **first** chapter.\nWith multiple lines."
},
{
"title": "Chapter 2: Next Steps",
"content": "Second chapter _content_."
}
]
}Result:
- Page 1: centered “My Guide”
- Page 2: “Table of Contents” with links to #chapter-1 and #chapter-2
- Subsequent pages: each chapter on its own page with content rendered from Markdown.
⚠️ Common Errors
Error:
Output
1 item
Field "data" is not an array of chapters
Error details
Other info
n8n version
1.100.1 (Self Hosted)
Stack trace
Error: Field "data" is not an array of chapters
at ExecuteContext.execute (/…/JsonToPdf.node.js:155:23)
at WorkflowExecute.runNode (…/workflow-execute.ts:1193:32)
…Cause: In
ebookmode, the node expectedjsonFieldto point at an array of{ title, content }, but found something else.Solution: Ensure your JSON conforms to the required structure:
{ "data": [ { "title": "...", "content": "..." }, … ] }
Error:
Field "data" is not a stringCause: In
singlemode, the node expectedjsonFieldto be a Markdown string.Solution: Provide a plain string:
{ "data": "# Hello\nSome text…" }
🧑💻 Development & Contributing
Clone this repo.
Run
npm install.Edit
src/nodes/JsonToPdf/JsonToPdf.node.ts.Compile:
npm run build.Link locally in n8n:
cd ~/.n8n/nodes ln -s /path/to/n8n-nodes-json-to-pdf distRestart n8n and test.
📝 License
MIT © [Threndy]
