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;