pdf-generator-node
v2.0.0
Published
node pdf generator
Maintainers
Keywords
Readme
pdf-generator-node
Lightweight HTML to PDF generator powered by Puppeteer and Handlebars.
Generate PDF as Buffer, Stream, or save directly to a file with a simple API.
Features
- 🚀 Native Puppeteer (no additional wrapper)
- 📄 Generate PDF from HTML
- 📦 Buffer, Stream or File output
- 🎨 Handlebars template support
- ⚡ Browser singleton (better performance)
- 🧠 Template cache
- 🔧 Custom Handlebars helpers
- ✅ Built-in
ifCondhelper - 🌍 Cross-platform (Windows, Linux, macOS)
Installation
npm install pdf-generator-nodeBasic Usage
const pdf = require("pdf-generator-node");
const fs = require("fs");
const html = fs.readFileSync("./template.html", "utf8");
const document = {
html,
data: {
users: [
{
name: "Farhan",
age: 29
},
{
name: "John",
age: 25
}
]
},
type: "buffer"
};
const options = {
format: "A4",
printBackground: true
};
const buffer = await pdf.create(document, options);HTML Template
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>User List</title>
</head>
<body>
<h1>User List</h1>
<ul>
{{#each users}}
<li>
{{this.name}} - {{this.age}}
</li>
{{/each}}
</ul>
</body>
</html>Output Types
Buffer
const document = {
html,
data,
type: "buffer"
};
const buffer = await pdf.create(document);Stream
const document = {
html,
data,
type: "stream"
};
const stream = await pdf.create(document);File
const document = {
html,
data,
path: "./reports/report.pdf"
};
await pdf.create(document);The output directory will be created automatically if it does not exist.
PDF Options
All options are passed directly to Puppeteer's page.pdf().
Example:
const options = {
format: "A4",
landscape: false,
printBackground: true,
margin: {
top: "10mm",
bottom: "10mm",
left: "10mm",
right: "10mm"
}
};See the official Puppeteer documentation for all available PDF options.
Browser Options
Optionally initialize the browser before generating PDFs.
await pdf.init({
executablePath: "/usr/bin/chromium",
headless: true,
args: [
"--no-sandbox",
"--disable-setuid-sandbox"
]
});If init() is not called, the browser will automatically start when create() is called for the first time.
Built-in Helper
ifCond
{{#ifCond age ">=" 18}}
Adult
{{else}}
Child
{{/ifCond}}Supported operators:
| Operator | |----------| | == | | === | | != | | !== | | < | | <= | | > | | >= | | && | | || |
Custom Helper
Register your own Handlebars helper.
pdf.registerHelper("currency", value => {
return new Intl.NumberFormat("id-ID").format(value);
});Template
{{currency total}}Template Cache
Clear cached templates.
pdf.clearTemplateCache();Get total cached templates.
pdf.templateCacheSize();Browser Lifecycle
Close browser manually.
await pdf.close();API
create(document, options)
Generate PDF.
Returns:
- Buffer
- Readable Stream
- File Path
depending on document.type.
init(options)
Initialize Puppeteer browser.
close()
Close browser instance.
registerHelper(name, fn)
Register custom Handlebars helper.
clearTemplateCache()
Remove all cached templates.
templateCacheSize()
Get total cached templates.
Built-in Helpers
| Helper | |---------| | ifCond |
Requirements
- Node.js >= 18
License
MIT
Made with ❤️ by Farhan Afandi
