71 lines
2.9 KiB
Markdown
71 lines
2.9 KiB
Markdown
# 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)
|
|
|
|
|