json-to-pdf

Convert Markdown/JSON into PDF (single document or e-book) for n8n

Package Information

Released: 15 mo ago
Downloads: 116 weekly / 322 monthly
Latest Version: 1.1.1

Documentation

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.
  • 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

  1. In your n8n instance, open Settings → Community Nodes → Install
  2. In npm Package Name enter:

n8n-nodes-free-web-scrapping
  1. 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:

    1. Insert a title page.
    2. Optionally generate a TOC with links to each chapter.
    3. Iterate each chapter, adding titles and content.

🛠️ Examples

Example 1: Single PDF

  1. Operation: single
  2. JSON Field: data
  3. 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

  1. Operation: ebook
  2. JSON Field: data
  3. Include TOC: true
  4. 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 ebook mode, the node expected jsonField to 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 string
  • Cause: In single mode, the node expected jsonField to be a Markdown string.

  • Solution: Provide a plain string:

    { "data": "# Hello\nSome text…" }
    

🧑‍💻 Development & Contributing

  1. Clone this repo.

  2. Run npm install.

  3. Edit src/nodes/JsonToPdf/JsonToPdf.node.ts.

  4. Compile: npm run build.

  5. Link locally in n8n:

    cd ~/.n8n/nodes
    ln -s /path/to/n8n-nodes-json-to-pdf dist
    
  6. Restart n8n and test.


📝 License

MIT © [Threndy]

Discussion