import puppeteer from 'puppeteer'; import { Parser } from './parser.interface'; import { HtmlParser } from './html-parser'; export class PDFParser implements Parser { constructor(private htmlParser: HtmlParser) {} async parse(data: T[]) { try { const browser = await puppeteer.launch({ executablePath: process.env.PUPPETEER_EXECUTABLE_PATH, args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', ], }); const page = await browser.newPage(); page.setDefaultNavigationTimeout(0); const html = await this.htmlParser.parse(data); await page.setContent(html, { waitUntil: 'networkidle0', timeout: 90000, }); // Configurações adicionais para garantir um PDF válido const pdf = await page.pdf({ format: 'A4', printBackground: true, margin: { top: '20mm', right: '15mm', bottom: '20mm', left: '15mm', }, preferCSSPageSize: true, displayHeaderFooter: false, headerTemplate: '', footerTemplate: '', omitBackground: false, pageRanges: '', tagged: true, outline: false, timeout: 90000, }); await browser.close(); return Buffer.from(pdf); } catch (error) { console.error('Error generating PDF:', error); throw error; } } }