2.9 KiB
2.9 KiB
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:
- HTML-Templates müssen ggf. angepasst werden (kein JavaScript-Support)
- CSS muss statisch sein (keine dynamischen Styles)
- Komplexe Layouts sollten vorher getestet werden
Weitere Ressourcen
- Imprintor auf Hex.pm
- GitHub Repository (falls verfügbar)