@sonardigital/nestjs-pdf
v1.0.4
Published
NestJS module for generating PDFs with Puppeteer, Handlebars and Tailwind CSS
Maintainers
Readme
@sonardigital/nestjs-pdf
NestJS module to generate PDFs with Puppeteer + Handlebars (+ optional Tailwind CSS).
Install
npm i @sonardigital/nestjs-pdfIl postinstall scarica Chrome for Testing nella cache Puppeteer del progetto
(node_modules/.cache/puppeteer). A runtime il modulo usa quel browser;
il Chrome di sistema resta solo un fallback.
Richiede Puppeteer 25+ (incluso) per funzionare su Node.js ≥ 24.16:
le versioni 24.x usano extract-zip, incompatibile con quelle release di Node.
Per saltare il download (es. CI offline) puoi impostare
PUPPETEER_SKIP_DOWNLOAD=true e fornire un executablePath in
puppeteerOptions.
Linux / Heroku (Aptfile)
Su ambienti Linux (es. Heroku con buildpack Apt) il progetto consumer
deve fornire le librerie di sistema richieste da Chrome. Crea un Aptfile
nella root del progetto consumer con:
ca-certificates
fonts-liberation
libasound2
libatk-bridge2.0-0
libatk1.0-0
libcairo2
libcups2
libdbus-1-3
libexpat1
libfontconfig1
libgbm1
libglib2.0-0
libgtk-3-0
libnspr4
libnss3
libpango-1.0-0
libpangocairo-1.0-0
libu2f-udev
libvulkan1
libx11-6
libx11-xcb1
libxcb1
libxcomposite1
libxdamage1
libxext6
libxfixes3
libxkbcommon0
libxrandr2
libxrender1
libxshmfence1
libxss1
libxtst6
xdg-utilsUsage
import { join } from 'path';
import { PdfModule } from '@sonardigital/nestjs-pdf';
PdfModule.forRoot({
templatesDir: join(process.cwd(), 'src/templates/pdf'),
tailwindCssPath: join(process.cwd(), 'src/assets/tailwind.pdf.css'),
});import { PdfService, PdfHeaders, PdfResponse } from '@sonardigital/nestjs-pdf';
@Get('report')
@PdfHeaders('report.pdf')
report(): Promise<PdfResponse> {
return this.pdfService.generate('report', { title: 'Hello' });
}Templates live in the consumer app (*.hbs). Use CSS classes .page-break and .avoid-break for pagination.
PDF CSS CLI
nestjs-pdf build-css
nestjs-pdf build-css --watchWire it in your app:
{
"scripts": {
"build": "nestjs-pdf build-css && nest build",
"start:dev": "npm run build:pdf-css"
}
}