From 32236706db6d61fba06cdaa1404d9842c1137aa3 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Thu, 6 Aug 2026 18:39:41 +0200 Subject: [PATCH] Gutschrift-PDF: Fusszeile auf Seite 1 (keine zweite Seite mehr) Footer wurde mit fester y=790 gesetzt und lief dadurch ueber den unteren Seitenrand -> pdfkit legte eine zweite Seite an. Position jetzt aus Seitengeometrie berechnet (heightOfString + page.height/margins), sodass die Fusszeile am unteren Rand der ersten Seite endet, auch bei zweizeiligem Umbruch. Verifiziert: PDF hat nur noch 1 Seite. Co-Authored-By: Claude Opus 4.8 (1M context) --- backend/src/services/creditNotePdf.service.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/backend/src/services/creditNotePdf.service.ts b/backend/src/services/creditNotePdf.service.ts index cbb0deb5..85ed96b1 100644 --- a/backend/src/services/creditNotePdf.service.ts +++ b/backend/src/services/creditNotePdf.service.ts @@ -150,6 +150,9 @@ export async function generateCreditNotePdf(creditNoteId: number): Promise<{ buf doc.fillColor('#000'); // ---- Fußzeile (Firmendaten) ---- + // Position aus der Seitengeometrie berechnen, damit die Fußzeile am + // unteren Rand der ERSTEN Seite endet und keine zweite Seite auslöst + // (auch wenn sie zweizeilig umbricht). const footerParts = [ company.name, company.managingDirector ? `GF: ${company.managingDirector}` : '', @@ -158,8 +161,13 @@ export async function generateCreditNotePdf(creditNoteId: number): Promise<{ buf company.commercialRegister, company.iban ? `IBAN: ${company.iban}` : '', ].filter(Boolean); - doc.fontSize(7).fillColor('#888') - .text(footerParts.join(' · '), 50, 790, { width: 495, align: 'center' }); + const footerText = footerParts.join(' · '); + const footerWidth = 495; + doc.fontSize(7).fillColor('#888'); + const footerHeight = doc.heightOfString(footerText, { width: footerWidth, align: 'center' }); + const bottomLimit = doc.page.height - doc.page.margins.bottom; + doc.text(footerText, 50, bottomLimit - footerHeight - 2, { width: footerWidth, align: 'center' }); + doc.fillColor('#000'); doc.end(); const buffer = await done;