mirror of
https://github.com/dadosfera/maestro.git
synced 2026-09-02 20:54:49 +00:00
58 lines
1.4 KiB
TypeScript
58 lines
1.4 KiB
TypeScript
import puppeteer from 'puppeteer';
|
|
import { Parser } from './parser.interface';
|
|
import { HtmlParser } from './html-parser';
|
|
|
|
export class PDFParser<T> implements Parser<T> {
|
|
constructor(private htmlParser: HtmlParser<T>) {}
|
|
|
|
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: 30000,
|
|
});
|
|
|
|
// 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: 30000,
|
|
});
|
|
|
|
await browser.close();
|
|
|
|
return Buffer.from(pdf);
|
|
} catch (error) {
|
|
console.error('Error generating PDF:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
}
|