{
  "id": "BY9w2cNMUAvBWpJ7",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Free PDF Generator in n8n \u2013 No External Libraries or Paid Services",
  "tags": [],
  "nodes": [
    {
      "id": "1a0c48b7-71a1-43ea-84f4-bc9d471f3d94",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        176,
        144
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1",
          "cachedResultName": "gpt-4.1"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "9c32fc19-37c9-4a40-90b1-a00ac76923d9",
      "name": "Archiving PDF File",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        1152,
        -80
      ],
      "parameters": {
        "name": "={{ $json.name }}.pdf",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "1IPcko8bzogO3W4mxhrW2Q017QA0Lc5MI",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1IPcko8bzogO3W4mxhrW2Q017QA0Lc5MI",
          "cachedResultName": "SmartSales"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "7e0a5a61-9004-4392-b1a5-786fd40cfcd9",
      "name": "Download attachment file",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        1376,
        -80
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "bcb58059-951e-4e60-a925-595e4d9a7829",
      "name": "Create document file",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        704,
        -80
      ],
      "parameters": {
        "url": "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&supportsAllDrives=true",
        "body": "=--foo_bar_baz\nContent-Type: application/json; charset=UTF-8\n\n{\n  \"name\": \"{{ $json.Today }}\",\n  \"mimeType\": \"application/vnd.google-apps.document\",\n  \"parents\": [\"{{ $json['Drive Folder ID'] }}\"]\n}\n\n--foo_bar_baz\nContent-Type: text/markdown; charset=UTF-8\n\n{{ $('Generate sample markdown document').item.json.output }}\n\n--foo_bar_baz--",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendQuery": true,
        "contentType": "raw",
        "sendHeaders": true,
        "authentication": "predefinedCredentialType",
        "rawContentType": "multipart/related; boundary=foo_bar_baz",
        "queryParameters": {
          "parameters": [
            {
              "name": "uploadType",
              "value": "multipart"
            },
            {
              "name": "supportsAllDrives",
              "value": "true"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "boundary",
              "value": "foo_bar_baz"
            }
          ]
        },
        "nodeCredentialType": "googleDriveOAuth2Api"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "e540e238-4bde-4dae-ac86-ac88764e7dc9",
      "name": "Convert document to PDF",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        928,
        -80
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {
          "googleFileConversion": {
            "conversion": {
              "docsToFormat": "application/pdf"
            }
          }
        },
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "e214322b-302f-4c54-906c-75e1e6c93ba9",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -144,
        -80
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "a36ca7db-6c6d-491a-8cd0-243916a2cd3a",
      "name": "Send message",
      "type": "n8n-nodes-base.slack",
      "position": [
        1600,
        -80
      ],
      "parameters": {
        "options": {
          "fileName": "={{ $json.name }}",
          "channelId": "C097VAKKPUP",
          "initialComment": "Formatted PDF file from markdown"
        },
        "resource": "file",
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "d1253bec-da2d-4530-baeb-6e5adc989a1c",
      "name": "Generate sample markdown document",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        80,
        -80
      ],
      "parameters": {
        "text": "=You are a Markdown expert. Write a single sample document in Markdown format that demonstrates all major Markdown syntax.\nThe document should be well-organized and easy to follow, with each section labeled clearly.\n\nInclude examples for:\n\t1.\tHeadings (H1 to H6)\n\t2.\tParagraphs and line breaks\n\t3.\tBold, italic, bold italic, and strikethrough\n\t4.\tBlockquotes (single and nested)\n\t5.\tLists: unordered, ordered, nested lists, and task lists\n\t6.\tLinks: inline, reference-style, and automatic links\n\t7.\tImages: inline and reference-style\n\t8.\tCode: inline code, fenced code blocks with language highlighting\n\t9.\tTables with alignment options\n\t10.\tHorizontal rules\n\t11.\tFootnotes\n\t12.\tEscaping special characters\n\t13.\tEmoji usage (if supported)\n\t14.\tHTML elements inside Markdown (example: <details> or <sup>)\n\nAt the top, add a short title and description of the document.\nUse clear section headings and short explanations before each example.\nMake sure the output is entirely valid Markdown so it can be rendered directly without edits.\n\nOutput only the Markdown content, nothing else.",
        "options": {
          "systemMessage": ""
        },
        "promptType": "define"
      },
      "typeVersion": 2
    },
    {
      "id": "17545deb-4c68-4038-abd7-1c7e9de0b99f",
      "name": "Configure Google Drive Folder ",
      "type": "n8n-nodes-base.set",
      "position": [
        480,
        -80
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "1ff0b9a4-7d60-44ec-b047-e49252f1ace9",
              "name": "Drive Folder ID",
              "type": "string",
              "value": "1IPcko8bzogO3W4mxhrW2Q017QA0Lc5MI"
            },
            {
              "id": "d64a1ac4-15db-4c84-a1db-fbd6b48084f5",
              "name": "Today",
              "type": "string",
              "value": "={{ $now.format(\"ddMMyyyyhhmmss\") }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "4bf9bfbc-3791-4c28-b32a-085f1864e726",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1216,
        -720
      ],
      "parameters": {
        "width": 912,
        "height": 1472,
        "content": "# Free PDF Generator in n8n \u2013 No External Libraries or Paid Services\n> A 100% free n8n workflow for generating professionally formatted PDFs without relying on external libraries or paid converters. It uses OpenAI to create Markdown content, Google Docs to format and convert to PDF, and integrates with Google Drive and Slack for archiving and sharing, ideal for reports, BRDs, proposals, or any document you need directly inside n8n.\n### Watch the demo video below:\n[![Watch the video](https://wisestackai.s3.ap-southeast-1.amazonaws.com/Presentation1+(1).jpg)](https://www.youtube.com/watch?v=BB32RPQYI94)\n\n## **Who\u2019s it for**\n- Teams that need **auto-generated documents** (reports, guides, checklists) in PDF format.\n- Operations or enablement teams who want files **archived in Google Drive** and **shared in Slack** automatically.\n- Anyone experimenting with **LLM-powered document generation** integrated into business workflows.\n\n## **How it works / What it does**\n1. **Manual trigger** starts the workflow.\n2. **LLM generates** a sample Markdown document (via OpenAI Chat Model).\n3. **Google Drive folder** is configured for storage.\n4. **Google Doc is created** from the generated Markdown content.\n5. **Document is exported to PDF** using Google Drive. ([Sample PDF generated from comprehensive markdown](https://wisestackai.s3.ap-southeast-1.amazonaws.com/12082025052957.pdf))\n6. **PDF is archived** in a designated Drive folder.\n7. **Archived PDF is downloaded** for sharing.\n8. **Slack message is sent** with the PDF attached.\n\n## **How to set up**\n1. **Add nodes in sequence**:\n   - Manual Trigger\n   - OpenAI Chat Model (prompt to generate sample Markdown)\n   - Set/Manual input for Google Drive folder ID(s)\n   - HTTP Request or Google Drive Upload (convert to Google Docs)\n   - Google Drive Download (PDF export)\n   - Google Drive Upload (archive PDF)\n   - Google Drive Download (fetch archived file)\n   - Slack Upload (send message with attachment)\n2. **Configure credentials** for OpenAI, Google Drive, and Slack.\n3. **Map output fields**:\n   - `data.markdown` \u2192 Google Docs creation\n   - `docId` \u2192 PDF export\n   - `fileId` \u2192 Slack upload\n4. **Test run** to ensure PDF is generated, archived, and posted to Slack.\n\n## **Requirements**\n- **Credentials**:\n  - OpenAI API key (or compatible LLM provider)\n  - Google Drive (OAuth2) with read/write permissions\n  - Slack bot token with `files:write` permission\n- **Access**:\n  - Write access to target Google Drive folders\n  - Slack bot invited to the target channel\n\n## **How to customize the workflow**\n- **Change the prompt** in the OpenAI Chat Model to generate different types of content (reports, meeting notes, checklists).\n- **Automate triggering**:\n  - Replace Manual Trigger with Cron for scheduled document generation.\n  - Use Webhook Trigger to run on-demand from external apps.\n- **Modify storage logic**:\n  - Save both `.md` and `.pdf` versions in Google Drive.\n  - Use separate folders for drafts vs. final versions.\n- **Enhance distribution**:\n  - Send PDFs to multiple Slack channels or via email.\n  - Integrate with project management tools for automated task creation."
      },
      "typeVersion": 1
    },
    {
      "id": "184cfef9-d92a-462d-9e8b-b6034eaa5ff9",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -272,
        -208
      ],
      "parameters": {
        "color": 4,
        "width": 288,
        "height": 480,
        "content": "**Trigger the Workflow**  \n   Start the process manually or replace with another trigger (e.g., Cron or Webhook) to run automatically."
      },
      "typeVersion": 1
    },
    {
      "id": "49d2e923-1356-4671-96e4-a6a39893e291",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        48,
        -208
      ],
      "parameters": {
        "color": 4,
        "width": 352,
        "height": 480,
        "content": "**Generate Markdown Content with AI**  \n   Use the OpenAI Chat Model to create a structured Markdown document based on your prompt, perfect for reports, BRDs, proposals, or meeting notes."
      },
      "typeVersion": 1
    },
    {
      "id": "350d767b-0ed5-4cbd-9f86-f5ea4044fbff",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        432,
        -208
      ],
      "parameters": {
        "color": 4,
        "width": 432,
        "height": 480,
        "content": "**Create Google Doc from Markdown**  \n   Upload the generated Markdown content to Google Drive and convert it into a Google Doc for proper formatting.\n\n[Sample PDF generated from comprehensive markdown](https://wisestackai.s3.ap-southeast-1.amazonaws.com/12082025052957.pdf)"
      },
      "typeVersion": 1
    },
    {
      "id": "2c5fc8ea-4c52-4b4b-8e13-c2ae0041aa1f",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        896,
        -208
      ],
      "parameters": {
        "color": 4,
        "width": 384,
        "height": 480,
        "content": "**Export and Archive as PDF**  \n   Convert the Google Doc to a PDF file, then upload it to your chosen Google Drive folder for storage and record-keeping."
      },
      "typeVersion": 1
    },
    {
      "id": "c3e95369-34a3-4f11-9204-78ee6b6e2217",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1328,
        -208
      ],
      "parameters": {
        "color": 4,
        "width": 400,
        "height": 480,
        "content": "**Share the PDF via Slack**  \n   Download the archived PDF and post it to a Slack channel with a message and links for quick access."
      },
      "typeVersion": 1
    },
    {
      "id": "9bc94ec2-4bce-4ed4-9afd-9270d2e46052",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1808,
        -240
      ],
      "parameters": {
        "width": 768,
        "height": 528,
        "content": "![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/pdf-1.png \"Optional title text\")"
      },
      "typeVersion": 1
    },
    {
      "id": "bf330105-df5e-4956-858a-b29d26e651d4",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        352
      ],
      "parameters": {
        "width": 768,
        "height": 992,
        "content": "![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/pdf-2.png \"Optional title text\")"
      },
      "typeVersion": 1
    },
    {
      "id": "12aea9ee-032f-4522-980b-69bee5d89913",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        544,
        352
      ],
      "parameters": {
        "width": 768,
        "height": 992,
        "content": "![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/pdf-3.png \"Optional title text\")"
      },
      "typeVersion": 1
    },
    {
      "id": "e754721c-dce2-4d19-a47d-b146e6bba331",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1328,
        352
      ],
      "parameters": {
        "width": 768,
        "height": 992,
        "content": "![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/pdf-4.png \"Optional title text\")"
      },
      "typeVersion": 1
    },
    {
      "id": "53e3dcc8-1e6e-4cb4-9f44-5fa49d731a9a",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2112,
        352
      ],
      "parameters": {
        "width": 768,
        "height": 992,
        "content": "![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/pdf-5.png \"Optional title text\")"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "93a6ffab-7fbe-42af-8025-f3e2a72ceea7",
  "connections": {
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Generate sample markdown document",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Archiving PDF File": {
      "main": [
        [
          {
            "node": "Download attachment file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create document file": {
      "main": [
        [
          {
            "node": "Convert document to PDF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert document to PDF": {
      "main": [
        [
          {
            "node": "Archiving PDF File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download attachment file": {
      "main": [
        [
          {
            "node": "Send message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Configure Google Drive Folder ": {
      "main": [
        [
          {
            "node": "Create document file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate sample markdown document": {
      "main": [
        [
          {
            "node": "Configure Google Drive Folder ",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Generate sample markdown document",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}