How to Save Text as a PDF Without External Services
If you want to convert plain text into a PDF file without relying on third-party APIs or external services, hereโs a simple two-step solution using JavaScript nodes and the pdfkit
library.
๐ง Step 1: Generate Base64-Encoded PDF from Text
First, create a JavaScript node and paste the following code.
/** @CustomParams { "text_content": { "type": "string", "title": "Text Content", "description": "The text content to be included in the PDF file" } } */ import PDFDocument from 'pdfkit'; export default async function run({ execution_id, input, data, store, db }) { const textContent = data.text_content; if (!textContent) { throw new Error('Text content is required.'); } const doc = new PDFDocument(); const chunks = []; doc.on('data', chunk => chunks.push(chunk)); const endPromise = new Promise(resolve => { doc.on('end', () => { const pdfBuffer = Buffer.concat(chunks); const base64 = pdfBuffer.toString('base64'); resolve({ base64 }); }); }); doc.text(textContent); doc.end(); return await endPromise; }
Then click Generate params
to create an input field for your text:

This node will generate a base64 string that represents your text as a PDF document.

๐ Step 2: Convert Base64 into a BinaryPDF File
Create a second JavaScript node, paste the code below:
/** @CustomParams { "base64_string": { "type": "string", "title": "Base64 String", "description": "Base64 encoded data to be written into a PDF file" } } */ import fs from 'fs'; import { v4 as uuidv4 } from 'uuid'; export default async function run({ execution_id, input, data, store, db }) { try { // Generate a random file name with .pdf extension const fileName = `${uuidv4()}.pdf`; // Ensure base64 data is provided const base64Data = data.base64_string; if (!base64Data) { throw new Error('Base64 data is required.'); } // Decode base64 data const binaryData = Buffer.from(base64Data, 'base64'); // Write binary data to a PDF file fs.writeFileSync(fileName, binaryData); return { file: file(fileName) }; } catch (error) { console.error(error.message); return { error: error.message }; } }
and also click Generate params
to create a field for the base64 string
Then, insert the variable from the previous node (the base64 string) into the base64_string
field.

Run the node, and as a result youโll get a ready-to-use PDF file, which you can download or pass further into your automation flow.


โ Example Workflow
- Enter your desired text in the
Text Content
field (e.g.,Hello, world!
).
- Run the first node to get a base64 string.
- Paste that base64 string into the second node's
Base64 String
field.
- Run the second node and download the resulting
.pdf
file.
๐ฅ Thatโs it! A simple, local solution with no external dependencies, no fees, and total control.