Marke im PDF um Faktor 1,5 vergroessert

Die erste Fassung war auf dem Ausdruck zu klein. Alle Masse haengen jetzt
an PLAN_WATERMARK_SCALE, damit Schrift und Tasse gemeinsam wachsen und die
Proportionen stimmen; das reservierte Band am Seitenfuss waechst mit
(PLAN_WATERMARK_BAND_MM), damit die Tabelle weiterhin Abstand haelt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-21 08:01:04 +02:00
co-authored by Claude Opus 5
parent 9b309bb942
commit 7df9c1fb4e
+26 -14
View File
@@ -65,6 +65,13 @@ define('EXPORT_HARD_MIN_ROW_HEIGHT_MM', 2.0);
// Overhead je Zeile. Ohne Beruecksichtigung summiert sich das ueber viele
// Zeilen zu mehreren mm und kann einen ungewollten Seitenumbruch ausloesen.
define('EXPORT_ROW_OVERHEAD_MM', 0.2);
// Groesse der Marke unten rechts (Hinweis auf die Kaffeeliste): Faktor auf
// alle Masse in MyCustomPDFWithWatermark::planWatermark(). Schrift und Tasse
// wachsen gemeinsam, damit die Proportionen stimmen.
define('PLAN_WATERMARK_SCALE', 1.5);
// Platz, den die Marke am Seitenfuss belegt - inklusive Dampffaehnchen und
// etwas Luft zur Tabelle.
define('PLAN_WATERMARK_BAND_MM', 8.0);
$allActive = ledger_fetch_participant_summaries($pdo, $tenantId, ['active_only' => true]);
$memberCount = count($allActive);
@@ -84,9 +91,9 @@ function export_page_row_budget_mm(bool $hasFooter, bool $hasSeitenHinweis, bool
if ($hasFooter) {
$budget -= 12.0;
} elseif ($hasPlanWatermark) {
// Der Hinweis auf die Kaffeeliste braucht deutlich weniger Platz als
// eine Fusszeile - steht beides, deckt deren Band ihn mit ab.
$budget -= 6.0;
// Der Hinweis auf die Kaffeeliste braucht weniger Platz als eine
// Fusszeile - steht beides, deckt deren Band ihn mit ab.
$budget -= PLAN_WATERMARK_BAND_MM;
}
if ($hasSeitenHinweis) {
$budget -= EXPORT_HINT_ROW_MM;
@@ -198,37 +205,42 @@ class MyCustomPDFWithWatermark extends TCPDF {
return;
}
// Alle Masse haengen an diesem Faktor, damit Schrift und Tasse
// gemeinsam wachsen und die Marke ihre Proportionen behaelt. 1.0 war
// die erste, zu kleine Fassung.
$skala = PLAN_WATERMARK_SCALE;
$rechterRand = $this->getPageWidth() - 5.0;
// Text und Symbol teilen sich eine gedachte Zeile: Cell() zentriert
// den Schriftzug zuverlaessig in deren Hoehe, die Tasse wird auf
// dieselbe Mittellinie gezeichnet. Text() waere hier die schlechtere
// Wahl - sein y-Bezugspunkt haengt an Schriftmetriken und ergab in
// der Probe einen um Millimeter versetzten Schriftzug.
$zeilenHoehe = 4.0;
$zeilenHoehe = 4.0 * $skala;
$zeileOben = $this->getPageHeight() - 5.0 - $zeilenHoehe;
$mitte = $zeileOben + ($zeilenHoehe / 2);
$this->SetFont('helvetica', '', 7);
$this->SetFont('helvetica', '', 7 * $skala);
$this->SetTextColor(130, 130, 130);
$textBreite = $this->GetStringWidth($this->planWatermarkLabel);
$tasseBreite = 2.6;
$tasseHoehe = 2.2;
$abstand = 1.0;
$henkelBreite = 1.0;
$tasseBreite = 2.6 * $skala;
$tasseHoehe = 2.2 * $skala;
$abstand = 1.0 * $skala;
$henkelBreite = 1.0 * $skala;
$tasseX = $rechterRand - $textBreite - $abstand - $tasseBreite - $henkelBreite;
$tasseY = $mitte - ($tasseHoehe / 2);
$this->SetDrawColor(130, 130, 130);
$this->SetLineWidth(0.2);
$this->SetLineWidth(0.2 * $skala);
// Tassenkoerper: nur unten abgerundet ('0011' = unten rechts/links).
$this->RoundedRect($tasseX, $tasseY, $tasseBreite, $tasseHoehe, 0.7, '0011', 'D');
$this->RoundedRect($tasseX, $tasseY, $tasseBreite, $tasseHoehe, 0.7 * $skala, '0011', 'D');
// Henkel: halber Bogen an der rechten Seite.
$this->Ellipse($tasseX + $tasseBreite, $mitte, 0.8, 0.6, 0, 270, 90, 'D');
$this->Ellipse($tasseX + $tasseBreite, $mitte, 0.8 * $skala, 0.6 * $skala, 0, 270, 90, 'D');
// Zwei Dampffaehnchen ueber der Tasse.
$this->Line($tasseX + 0.7, $tasseY - 1.1, $tasseX + 0.7, $tasseY - 0.4);
$this->Line($tasseX + 1.7, $tasseY - 1.1, $tasseX + 1.7, $tasseY - 0.4);
$this->Line($tasseX + (0.7 * $skala), $tasseY - (1.1 * $skala), $tasseX + (0.7 * $skala), $tasseY - (0.4 * $skala));
$this->Line($tasseX + (1.7 * $skala), $tasseY - (1.1 * $skala), $tasseX + (1.7 * $skala), $tasseY - (0.4 * $skala));
$this->SetXY($rechterRand - $textBreite, $zeileOben);
$this->Cell($textBreite, $zeilenHoehe, $this->planWatermarkLabel, 0, 0, 'R');