ejs-html-to-pdf-lite
Version:
Convert HTML or EJS to PDF using Playwright-core with full CSS and design support.
106 lines (83 loc) โข 2.9 kB
Markdown
# ejs-html-to-pdf-lite
A fast, lightweight, and production-ready alternative to `html-pdf` and `puppeteer` for converting HTML or EJS templates into high-quality PDFs using `playwright-core`, with full design and CSS support.
## โ
Why Use ejs-html-to-pdf-lite?
- ๐ฅ **Minimal dependencies** โ only `playwright-core` + `ejs`
- ๐จ **Full CSS support** โ Flexbox, Grid, custom fonts, inline styles
- ๐ผ๏ธ **Base64 image support** โ embed images directly in templates
- ๐ **Supports both `.ejs` and `.html`** โ dynamic or static usage
- ๐งพ **Great for invoices, reports, and other document PDFs**
- ๐ฆ **Tiny install size** โ no bundled browser
- ๐ ๏ธ **Supports standard & custom paper sizes**
- โ๏ธ **Headless and production-safe**
## โ
Features
- Converts full HTML and EJS templates into PDF
- Supports modern CSS (Flexbox, Grid, Google Fonts, etc.)
- Inline `<style>` and internal CSS fully supported
- Base64-encoded images for self-contained PDFs
- Fully styled PDF output
- Support for standard and custom paper sizes
## ๐ Use Cases
- Server-side PDF generation (e.g., invoices, receipts)
- Email-ready PDFs (attachments, download links)
- Exporting filled forms using EJS templates
- Printable reports or dashboards in backend apps
## ๐ฆ Install
```bash
npm install ejs-html-to-pdf-lite
npx playwright install chromium
```
## ๐ Usage
```js
const { generatePdf } = require('ejs-html-to-pdf-lite');
// Basic usage with default A4 size
await generatePdf({
inputPath: './templates/example.ejs',
outputPath: './output.pdf',
data: {
name: 'John Doe',
items: [
{ name: 'Product 1', quantity: 2, price: 10.99 },
{ name: 'Product 2', quantity: 1, price: 24.99 }
]
},
type: 'ejs' // or 'html'
});
// With custom paper size
await generatePdf({
inputPath: './templates/example.ejs',
outputPath: './output-letter.pdf',
data: {
name: 'John Doe',
items: [
{ name: 'Product 1', quantity: 2, price: 10.99 },
{ name: 'Product 2', quantity: 1, price: 24.99 }
]
},
type: 'ejs',
paperSize: 'Letter' // Use standard paper size
});
// With custom dimensions
await generatePdf({
inputPath: './templates/example.ejs',
outputPath: './output-custom.pdf',
data: {
name: 'John Doe',
items: [
{ name: 'Product 1', quantity: 2, price: 10.99 },
{ name: 'Product 2', quantity: 1, price: 24.99 }
]
},
type: 'ejs',
paperSize: { width: '8.5in', height: '11in' } // Custom dimensions
});
```
## ๐ Supported Paper Sizes
- Standard sizes: `A0`, `A1`, `A2`, `A3`, `A4` (default), `A5`, `A6`, `Letter`, `Legal`, `Tabloid`, `Ledger`
- Custom dimensions: provide an object with `width` and `height` properties (e.g., `{ width: '8.5in', height: '11in' }`)
## ๐ Requirements
- Node.js 14+
- Chromium (install with `npx playwright install chromium`)