# PDF Generation: Imprintor statt Chromium ## Übersicht Für die PDF-Generierung in der Mitgliederverwaltung verwenden wir **Imprintor** (`~> 0.5.0`) anstelle von Chromium-basierten Lösungen (wie z.B. Puppeteer, Chrome Headless, oder ähnliche). ## Warum Imprintor statt Chromium? ### 1. Ressourceneffizienz - **Geringerer Speicherverbrauch**: Imprintor benötigt keine vollständige Browser-Instanz im Speicher - **Niedrigere CPU-Last**: Native PDF-Generierung ohne Browser-Rendering-Pipeline - **Kleinere Docker-Images**: Keine Chromium-Installation erforderlich (spart mehrere hundert MB) ### 2. Performance - **Schnellere Generierung**: Direkte PDF-Generierung ohne HTML-Rendering-Overhead - **Bessere Skalierbarkeit**: Kann mehrere PDFs parallel generieren ohne Browser-Instanzen zu verwalten - **Niedrigere Latenz**: Keine Browser-Startup-Zeit ### 3. Deployment & Wartung - **Einfacheres Deployment**: Keine System-Abhängigkeiten (Chromium, ChromeDriver, etc.) - **Weniger Wartungsaufwand**: Keine Browser-Version-Updates zu verwalten - **Bessere Container-Kompatibilität**: Funktioniert in minimalen Docker-Images (z.B. Alpine) ### 4. Sicherheit - **Kleinere Angriffsfläche**: Keine Browser-Engine mit bekannten Sicherheitslücken - **Isolation**: Weniger System-Calls und externe Prozesse ### 5. Elixir-Native Lösung - **Erlang/OTP-Integration**: Nutzt die Vorteile der BEAM-VM (Concurrency, Fault Tolerance) - **Type-Safety**: Bessere Integration mit Elixir-Typen und Pattern Matching - **Einfachere Fehlerbehandlung**: Elixir-native Error-Handling statt externer Prozesse ## Wann Chromium trotzdem sinnvoll wäre Chromium-basierte Lösungen sind sinnvoll, wenn: - Komplexe JavaScript-Ausführung im HTML nötig ist - Moderne CSS-Features (Grid, Flexbox, etc.) kritisch sind - Screenshots von Web-Seiten generiert werden sollen - Dynamische Inhalte gerendert werden müssen, die JavaScript erfordern ## Verwendung in diesem Projekt Imprintor wird für folgende Anwendungsfälle verwendet: - **Member-Export als PDF**: Generierung von Mitgliederlisten und -reports - **Statische Reports**: PDF-Generierung für vordefinierte Report-Formate - **Dokumente**: Generierung von Mitgliedschaftsbescheinigungen, Rechnungen, etc. ## Technische Details - **Dependency**: `{:imprintor, "~> 0.5.0"}` - **Typ**: Native Elixir-Bibliothek (vermutlich basierend auf Rust-NIFs oder ähnlichen Technologien) - **Format**: Generiert PDF direkt aus HTML/Templates ohne Browser-Engine ## Migration von Chromium (falls vorhanden) Falls zuvor eine Chromium-basierte Lösung verwendet wurde: 1. HTML-Templates müssen ggf. angepasst werden (kein JavaScript-Support) 2. CSS muss statisch sein (keine dynamischen Styles) 3. Komplexe Layouts sollten vorher getestet werden ## Weitere Ressourcen - [Imprintor auf Hex.pm](https://hex.pm/packages/imprintor) - [GitHub Repository](https://github.com/[imprintor-repo]) (falls verfügbar)