From b9e7de0ca07f3751847ea0b289008de2af5ed6af Mon Sep 17 00:00:00 2001 From: "Rodrigo B. de Sousa Martins" Date: Wed, 11 Jun 2025 11:57:33 -0300 Subject: [PATCH] backend: fix PDFService.ts --- src/server/services/PdfService.ts | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/server/services/PdfService.ts b/src/server/services/PdfService.ts index df74406..9df9d44 100644 --- a/src/server/services/PdfService.ts +++ b/src/server/services/PdfService.ts @@ -187,19 +187,9 @@ export class PdfService { 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() }); - } - // Após mesclar o timbrado + // Remove página vazia do final ANTES de mesclar o timbrado + let pdfDoc = await PDFDocument.load(pdfBuffer); let pageCountBefore = pdfDoc.getPageCount(); - // Remove apenas a ÚLTIMA página se ela estiver realmente vazia (sem conteúdo) if (pageCountBefore > 1) { const lastPage = pdfDoc.getPage(pageCountBefore - 1); const contentStreams = (lastPage as any).node.Contents?.(); @@ -208,7 +198,6 @@ export class PdfService { if (!contentStreams) { isBlank = true; } else if (Array.isArray(contentStreams)) { - // Se todos os streams são vazios ou muito pequenos isBlank = contentStreams.every( (stream: any) => !stream.contents || @@ -222,6 +211,17 @@ export class PdfService { pdfDoc.removePage(pageCountBefore - 1); } } + + // Agora sim, mescle o timbrado nas páginas restantes + 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) {