backend: fix PDFService.ts
This commit is contained in:
1 parent
0fef046d38
commit
b9e7de0ca0
1 file changed
+13
-13
@@ -187,19 +187,9 @@ export class PdfService {
|
|||||||
return Buffer.from(pdfBuffer);
|
return Buffer.from(pdfBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mescla cada página do PDF gerado com o timbrado
|
// Remove página vazia do final ANTES de mesclar o timbrado
|
||||||
const pdfDoc = await PDFDocument.load(pdfBuffer);
|
let 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
|
|
||||||
let pageCountBefore = pdfDoc.getPageCount();
|
let pageCountBefore = pdfDoc.getPageCount();
|
||||||
// Remove apenas a ÚLTIMA página se ela estiver realmente vazia (sem conteúdo)
|
|
||||||
if (pageCountBefore > 1) {
|
if (pageCountBefore > 1) {
|
||||||
const lastPage = pdfDoc.getPage(pageCountBefore - 1);
|
const lastPage = pdfDoc.getPage(pageCountBefore - 1);
|
||||||
const contentStreams = (lastPage as any).node.Contents?.();
|
const contentStreams = (lastPage as any).node.Contents?.();
|
||||||
@@ -208,7 +198,6 @@ export class PdfService {
|
|||||||
if (!contentStreams) {
|
if (!contentStreams) {
|
||||||
isBlank = true;
|
isBlank = true;
|
||||||
} else if (Array.isArray(contentStreams)) {
|
} else if (Array.isArray(contentStreams)) {
|
||||||
// Se todos os streams são vazios ou muito pequenos
|
|
||||||
isBlank = contentStreams.every(
|
isBlank = contentStreams.every(
|
||||||
(stream: any) =>
|
(stream: any) =>
|
||||||
!stream.contents ||
|
!stream.contents ||
|
||||||
@@ -222,6 +211,17 @@ export class PdfService {
|
|||||||
pdfDoc.removePage(pageCountBefore - 1);
|
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();
|
const mergedPdf = await pdfDoc.save();
|
||||||
return Buffer.from(mergedPdf);
|
return Buffer.from(mergedPdf);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
Reference in new issue
Block a user