Registramos helpers Handlebars:

Now go generate those reports! 📄🚀

async getPdfResult(jobId: string): Promise<Buffer | null> const job = await this.pdfQueue.getJob(jobId); if (job && (await job.isCompleted())) return job.returnvalue;

async generateFromHtml(html: string, options?: PDFOptions): Promise<Buffer> const browser = await this.getBrowser(); const page = await browser.newPage();

}

@Process('generate-pdf') async handlePdfGeneration(job: Job): Promise<Buffer> const html = await this.templateService.compile('sales-report', job.data); return this.pdfGenerator.generateFromHtml(html);

}

}

// 3. Generate PDF const page = await this.browser.newPage(); await page.setContent(html, waitUntil: 'networkidle0' );

return this.browser;

Hemos construido un sistema completo y de alto rendimiento para . Desde la configuración de plantillas dinámicas, pasando por la generación con Puppeteer, hasta el manejo asíncrono con colas Bull, ahora tienes las herramientas para implementar reportes empresariales escalables.

// Generar PDF con opciones avanzadas const pdfBuffer = await page.pdf( format: 'A4', printBackground: true, margin: top: '20px', right: '20px', bottom: '20px', left: '20px' , ...options, );

import Controller, Post, Body, Get, Param, Res, StreamableFile from '@nestjs/common'; import Response from 'express'; import ReportsService from './reports.service'; import GenerateReportDto from './dto/generate-report.dto';

Яндекс.Метрика