tenta fix pdfservice.js

This commit is contained in:
rodrigo committed 2025-04-22 15:19:48 -03:00
1 parent 4a189f82b2
commit 43cc832274
1 file changed
+34 -2
+34 -2
View File
@@ -1,4 +1,7 @@
import puppeteer from 'puppeteer';
import { PDFDocument } from 'pdf-lib';
import fs from 'fs/promises';
import path from 'path';
import { prisma } from '../prismaClient';
// Função utilitária para converter pixels em milímetros (1px ≈ 0.264583 mm)
@@ -103,7 +106,7 @@ export class PdfService {
`;
}
// Gera PDF a partir do HTML, respeitando margens e timbrado
// Gera PDF a partir do HTML, depois sobrepõe o timbrado em cada página
async gerarPDF(conteudo: string) {
try {
const config = await this.getConfiguracao();
@@ -128,7 +131,36 @@ export class PdfService {
preferCSSPageSize: true
});
await browser.close();
return Buffer.from(pdfBuffer);
// Se não houver timbrado, retorna direto
if (!config.timbradoUrl) {
return Buffer.from(pdfBuffer);
}
// Caminho absoluto do PDF de timbrado
const timbradoPath = config.timbradoUrl.startsWith('/uploads')
? path.join(process.cwd(), 'public', config.timbradoUrl)
: path.join(process.cwd(), 'public', 'uploads', path.basename(config.timbradoUrl));
let timbradoBytes: Buffer;
try {
timbradoBytes = await fs.readFile(timbradoPath);
} catch (e) {
console.error('Timbrado não encontrado:', timbradoPath);
return Buffer.from(pdfBuffer);
}
// Mescla cada página do PDF gerado com o timbrado
const pdfDoc = await PDFDocument.load(pdfBuffer);
const timbradoDoc = await PDFDocument.load(timbradoBytes);
const timbradoPage = timbradoDoc.getPage(0);
const [timbradoEmbed] = await pdfDoc.embedPages([timbradoPage]);
const pageCount = pdfDoc.getPageCount();
for (let i = 0; i < pageCount; i++) {
const page = pdfDoc.getPage(i);
page.drawPage(timbradoEmbed, { x: 0, y: 0, width: page.getWidth(), height: page.getHeight() });
}
const mergedPdf = await pdfDoc.save();
return Buffer.from(mergedPdf);
} catch (error) {
console.error('Erro ao gerar PDF:', error);
throw new Error('Falha ao gerar PDF');