feat: adds pdf export with imprintor
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
parent
496e2e438f
commit
f6b35f03a5
16 changed files with 1962 additions and 70 deletions
71
docs/pdf-generation-imprintor.md
Normal file
71
docs/pdf-generation-imprintor.md
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
# 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)
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue