mitgliederverwaltung/docs/pdf-generation-imprintor.md
carla f6b35f03a5
Some checks failed
continuous-integration/drone/push Build is failing
feat: adds pdf export with imprintor
2026-02-11 11:47:26 +01:00

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:

  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