import puppeteer from 'puppeteer'; import { prisma } from '../prismaClient'; export class PdfService { private async getConfiguracao() { try { // Buscar configuração ou usar valores padrão const config = await prisma.configuracaoDocumento.findFirst({ orderBy: { criadoEm: 'desc' }, select: { id: true, headerImageUrl: true, footerImageUrl: true, logoUrl: true, timbradoUrl: true, timbradoMarginTop: true, timbradoMarginBottom: true, timbradoMarginLeft: true, timbradoMarginRight: true, criadoEm: true } }); console.log('Configuração encontrada:', config); // Debug // Retornar configuração padrão se não existir return { cabecalhoHtml: config?.cabecalhoHtml || `

{{escritorio.nome}}

`, rodapeHtml: config?.rodapeHtml || `
{{escritorio.endereco}}
Tel: {{escritorio.telefone}} | Email: {{escritorio.email}}
`, logoUrl: config?.logoUrl || '', timbradoUrl: config?.timbradoUrl || '', timbradoMarginTop: config?.timbradoMarginTop || 100, timbradoMarginBottom: config?.timbradoMarginBottom || 50, timbradoMarginLeft: config?.timbradoMarginLeft || 50, timbradoMarginRight: config?.timbradoMarginRight || 50 }; } catch (error) { console.error('Erro ao buscar configuração:', error); throw new Error('Falha ao buscar configuração'); } } private gerarHTML(content: string, config: any) { const timbradoUrl = config.timbradoUrl ? `${process.env.BACKEND_URL || 'http://localhost:5000'}${config.timbradoUrl}` : ''; console.log('Gerando PDF com timbrado:', timbradoUrl); return `
${content}
`; } async gerarPDF(conteudo: string, escritorio: any) { try { const config = await prisma.configuracaoDocumento.findFirst({ orderBy: { criadoEm: 'desc' } }); console.log('Configuração do PDF:', config); const html = this.gerarHTML(conteudo, config); const browser = await puppeteer.launch({ headless: 'new', args: ['--no-sandbox'] }); const page = await browser.newPage(); await page.setViewport({ width: 794, // A4 width in pixels (72 dpi) height: 1123, deviceScaleFactor: 2 }); await page.setContent(html, { waitUntil: ['networkidle0', 'load'], timeout: 30000 }); const pdfBuffer = await page.pdf({ format: 'A4', printBackground: true, margin: { top: '0', right: '0', bottom: '0', left: '0' }, preferCSSPageSize: true }); await browser.close(); return Buffer.from(pdfBuffer); } catch (error) { console.error('Erro ao gerar PDF:', error); throw new Error('Falha ao gerar PDF'); } } }