# PDF Generation Instructions Aktualisiert: 2025-10-20 ## Kontext PDF-Erstellung erfolgt aktuell über Hilfsmethoden in `AbstractController` mittels iText7. ## Kern-Hilfsmethoden - `loadCompanyLogo()` -> Lädt Logo aus LOGO_PATH. - `generateSorroundingTable(String header, float maxWidth)` -> Einspaltige Rahmen-Tabelle mit Header. - `generateInnerTable(Text header, boolean last, String... values)` -> 2-Spalten Tabelle mit alternierender Hintergrundfarbe. - `generateInnerTable(Text header, int nrColumns, boolean last, String... values)` -> Generisch n-Spalten Tabelle. - `addInnerCells(Table table, String name, String value, boolean isGray)` / Overload -> Fügt Datenzeilen hinzu. - `addPagenumbers(Document document, String ticketNr, Image nextPagesCompanyLogo)` -> Fügt Seitenzahlen & Logo hinzu. ## Gestaltungsrichtlinien - Fonts: Standard Helvetica / Bold (Konstanten `FONT_NORMAL`, `FONT_BOLD`). - Schriftgrößen klein (8F Inhalte, 11F Header, 12F Hauptheader) für konsistente Layouts. - Wechselnde Hintergrundfarbe (LIGHT_GRAY) zur besseren Lesbarkeit. ## Erweiterung Neue Tabellen-/Layout-Funktionen: 1. Prüfen ob existierende Methoden erweiterbar statt neue Variante. 2. Konsistenz in Font & Spaltenbreiten wahren. 3. Kein Hardcode von absoluten Positionen außer bei Kopf-/Fußzeilen. ## Ressourcen Pfade - LOGO_PATH statisch: `/rundata/logo.png`. Anpassungen zentral vornehmen. ## Fehlerhandhabung - Aktuell wenige try/catch Blöcke; bei Erweiterung: Fehler loggen (`LOGGER.error(e)`) und Benutzer über Controller Messages informieren. ## Edge Cases - Leere Werte -> `-/-` Platzhalter. - Null Tabelleninstanz in addInnerCells -> early return. ## Verbesserungen - Einführung eines PDFUtility Service zur Entkopplung vom Controller. - Parameterobjekt für dynamische Tabellenkonfiguration (Spaltenbreiten, Farben, Größen). ## Generator Leitplanken - iText7 API weiterverwenden; keine neuen PDF Libraries. - Wiederverwendbare Logik nicht direkt im konkreten Controller implementieren -> Utility / Service. ---