UNPKG

qus-node-pdf-generator-temp

Version:
56 lines (45 loc) 1.77 kB
import { Injectable } from '@nestjs/common'; import * as Handlebars from 'handlebars'; import puppeteer, { Browser, Page } from 'puppeteer'; @Injectable() export class PdfService { /** * Renders a single template into a PDF. * * @param template * @param data */ async render(template: string, data: any): Promise<Uint8Array> { // Compile the Handlebars template const compiledTemplate: HandlebarsTemplateDelegate = Handlebars.compile(template); const htmlContent: string = compiledTemplate(data); // Generate PDF using Puppeteer const browser: Browser = await puppeteer.launch({ headless: 'shell' }); const page: Page = await browser.newPage(); await page.setContent(htmlContent, { waitUntil: 'networkidle0' }); const pdfBuffer: Uint8Array = await page.pdf({ format: 'A4' }); await browser.close(); return pdfBuffer; } /** * Renders multiple templates into a single PDF. * * @param templates * @param data */ async renderMultiple(templates: string[], data: any[]): Promise<Uint8Array> { // Combine all HTML content let combinedHtmlContent = ''; for (let i: number = 0; i < templates.length; i++) { const compiledTemplate: HandlebarsTemplateDelegate = Handlebars.compile(templates[i]); combinedHtmlContent += compiledTemplate(data[i]); } // Generate PDF using Puppeteer const browser: Browser = await puppeteer.launch({ headless: 'shell' }); const page: Page = await browser.newPage(); await page.setContent(combinedHtmlContent, { waitUntil: 'networkidle0' }); const pdfBuffer: Uint8Array = await page.pdf({ format: 'A4' }); await browser.close(); return pdfBuffer; } }