Modul: Dokumenten-Generator¶
Zweck des Moduls¶
Der Dokumenten-Generator ermöglicht die Erstellung und Verwaltung von professionellen PDF-Dokumenten mit automatischer Versionierung. Das Modul unterstützt Dokumentvorlagen mit Logo, Markdown-basierte Inhalte mit Variablen-Unterstützung und bietet stabile öffentliche URLs für externe Verlinkungen (z.B. auf der Vereinswebseite).
Navigation im Admin-Bereich¶
Das Dokumenten-Generator-Modul finden Sie im Admin-Menü unter "DOCUMENT_GENERATOR" mit drei Hauptbereichen:
- Dokumentvorlagen - Template-Verwaltung mit Logo-Upload
- Dokumentinhalte - Content-Verwaltung mit Versionierung
- Generierte Dokumente - Fertige PDF-Dokumente mit Download-Links
Bereiche im Detail¶
Dokumentvorlagen (Admin > Document_Generator > Dokumentvorlagen)¶
Zweck: Verwaltung wiederverwendbarer Dokumentvorlagen für professionelle PDF-Dokumente
Hauptfelder: - Name: Template-Bezeichnung (z.B. "Vereinsbrief", "Satzung", "Protokoll") - Generierungsmodus: LaTeX (professionell) oder HTML (einfach) - Logo: Vereinslogo hochladen (PNG/JPG empfohlen) - LaTeX-Hauptdatei: Vollständiges Template mit Platzhaltern - LaTeX LCO-Datei: Briefkonfiguration für Kopf-/Fußzeilen
Verfügbare Platzhalter (automatisch aus Vereinsdaten):
{{fromname}} = Vereinsname
{{fromaddress}} = Vereinsadresse
{{fromphone}} = Telefonnummer
{{fromemail}} = E-Mail-Adresse
{{fromurl}} = Homepage-URL
{{place}} = Ort
{{frombank}} = Bankverbindung
{{logo_filename}} = Logo-Dateiname
{{date}} = Aktuelles Datum
Zusätzliche Platzhalter aus dem Dokumentinhalt:
- {{content}} = Der Markdown-Inhalt wird hier eingefügt
- Alle eigenen Variablen (z.B. {{title}}, {{author}}, {{version}})
Logo in der Listenansicht: Das hochgeladene Logo wird automatisch auf max. 100px Höhe skaliert angezeigt.
Template-Erstellung
Die LaTeX-Templates werden meist einmalig vom IT-Team erstellt. HTML-Templates sind einfacher zu erstellen, aber weniger professionell.
Dokumentinhalte (Admin > Document_Generator > Dokumentinhalte)¶
Zweck: Verwaltung des eigentlichen Dokumentinhalts mit Markdown und eigenen Variablen
Automatische Funktionen:
- Token-Generierung: 16-stelliger sicherer Code für stabile URLs (z.B. aB3cD9eF2gH4iJ5k)
- Slug-Generierung: Menschenlesbarer Kurzname aus Titel (nur zur Übersicht)
- Versionsverwaltung: Automatisches Tracking aller PDF-Generierungen
Wichtige Felder: - Titel: Dokumenttitel (z.B. "Vereinssatzung FVW 2025") - Slug: Wird automatisch erstellt, nur für Admin-Übersicht - Standard-Template: Welche Vorlage soll verwendet werden? - Markdown-Inhalt: Der eigentliche Inhalt mit Formatierung - Variablen: Zusätzliche Platzhalter als JSON (siehe unten) - Aktiv: Ist dieses Dokument verfügbar?
Tab: URLs & Versionen
Hier sehen Sie den öffentlichen Token und alle verfügbaren URLs:
Token: aB3cD9eF2gH4iJ5k (16 Zeichen, sicher, nicht erratbar)
Stabile URLs (empfohlen für externe Links):
- https://ihre-domain.de/documents/aB3cD9eF2gH4iJ5k/latest/ (HTML-Ansicht)
- https://ihre-domain.de/documents/aB3cD9eF2gH4iJ5k/latest/pdf/ (PDF-Download)
Diese URLs bleiben immer gleich!
Die /latest/-URLs zeigen automatisch die neueste Version - perfekt für Verlinkungen auf der Webseite, die sich selbst aktualisieren!
Versionsübersicht-Tabelle: Zeigt alle bereits generierten Versionen mit: - Version-Nummer (v1, v2, v3...) - Generierungsdatum - Status (🟢 LATEST = aktuellste Version) - Links zu HTML und PDF für jede Version
Tab: Content
Hier geben Sie den eigentlichen Inhalt ein:
Markdown-Editor mit Syntax-Highlighting:
# Überschrift 1
## Überschrift 2
Dies ist normaler Text mit **Fettdruck** und *Kursiv*.
- Aufzählung Punkt 1
- Aufzählung Punkt 2
1. Nummerierte Liste
2. Punkt zwei
Sie können auch Platzhalter verwenden: {{title}}, {{author}}
Tab: Variablen
Hier definieren Sie eigene Platzhalter im JSON-Format:
Beispiel:
{
"author": "Max Mustermann",
"version": "1.0",
"approved_date": "01.01.2025",
"title": "Vereinssatzung"
}
Diese Variablen können dann im Markdown-Inhalt verwendet werden:
Verfasser: {{author}}
Version: {{version}}
Genehmigt am: {{approved_date}}
JSON-Syntax beachten
- Doppelte Anführungszeichen verwenden:
"text" - Komma zwischen Einträgen (außer beim letzten)
- Geschweiften Klammern nicht vergessen:
{ }
Zeilen-Aktionen (Buttons in der Liste): - 📄 PDF generieren (asynchron): Startet PDF-Generierung im Hintergrund
Generierte Dokumente (Admin > Document_Generator > Generierte Dokumente)¶
Zweck: Verwaltung und Zugriff auf fertig generierte PDF-Dokumente
So funktioniert die Versionierung:
Jedes Mal, wenn Sie ein Dokument neu generieren:
- Neue Version wird erstellt (v1 → v2 → v3...)
- Neue Version wird als "LATEST" markiert (grüner Badge)
- Alte Versionen bleiben erhalten, verlieren aber den LATEST-Status
- Die /latest/-URL zeigt automatisch die neueste Version
Beispiel:
1. Erste Generierung → v1 🟢 LATEST
/documents/abc123/latest/ zeigt v1
2. Dokument bearbeiten + neu generieren → v2 🟢 LATEST
v1 verliert LATEST-Status
/documents/abc123/latest/ zeigt jetzt v2
/documents/abc123/v1/ zeigt weiterhin die alte Version v1
3. Erneute Änderung + neu generieren → v3 🟢 LATEST
v2 verliert LATEST-Status
/documents/abc123/latest/ zeigt jetzt v3
Spalten in der Listenansicht: - Titel: Dokumenttitel - Version: Versionsnummer mit Badge (🟢 LATEST = aktuell) - Template: Verwendete Vorlage - Inhalt: Verknüpfter DocumentContent - Generiert am: Erstellungsdatum - Download-Anzahl: Wie oft wurde es heruntergeladen? - Öffentlich zugänglich: Download ohne Login möglich? - Links: Schnellzugriff auf alle URLs
Filter (rechte Seitenleiste): - Nach Öffentlich zugänglich filtern - Nach Neueste Version filtern (nur LATEST anzeigen) - Nach Generierungsdatum filtern - Nach Template filtern
Tab: Dokument: - Titel: Dokumenttitel - Template: Verwendetes Template - Inhalt: Verknüpfter DocumentContent - Öffentlich zugänglich: Erlaubt Download ohne Login
Tab: Version: - Version: Versionsnummer (automatisch vergeben) - Neueste Version: Ist dies die aktuellste? (automatisch gesetzt)
Tab: Output: - PDF-Datei: Download des generierten PDFs - Gerendertes HTML: Vollständiges HTML für Vorschau
Tab: Zugriff:
Links-Bereich zeigt alle verfügbaren URLs:
- Version vX: URLs für diese spezifische Version
- 🔗 HTML:
/documents/<token>/v1/ -
📄 PDF:
/documents/<token>/v1/pdf/ -
🟢 Stabile Latest-URL (nur bei aktueller Version):
- 🔗 HTML:
/documents/<token>/latest/ - 📄 PDF:
/documents/<token>/latest/pdf/ -
Grüner Hintergrund = Diese URLs aktualisieren sich automatisch!
-
Legacy (Token): Alte URLs für Rückwärtskompatibilität
- 🔗 HTML:
/view/<langer-token>/ - 📄 PDF:
/pdf/<langer-token>/
Download-Tracking: - Download-Anzahl: Zählt alle Zugriffe auf dieses Dokument - Letzter Zugriff: Wann wurde es zuletzt abgerufen?
Manuelle Erstellung nicht möglich
Generierte Dokumente können nicht manuell hinzugefügt werden - nur über die "📄 PDF generieren"-Aktion bei Dokumentinhalten.
Was passiert beim PDF-Generieren?¶
Schritt-für-Schritt Ablauf¶
Wenn Sie auf "📄 PDF generieren (asynchron)" klicken:
-
Erfolgsmeldung erscheint:
🚀 PDF-Generierung gestartet für 1 Dokument(e). Die Generierung läuft im Hintergrund. Task ID: abc123-def456... -
Hintergrund-Verarbeitung läuft (Sie können weiterarbeiten):
- Template wird geladen
- Platzhalter werden mit Ihren Werten ersetzt
- Markdown wird in formatiertes PDF umgewandelt
- Logo wird eingefügt
-
PDF wird erstellt und gespeichert
-
Automatische Versionierung:
- System prüft: Gibt es schon Versionen? → Nächste Nummer nehmen
- Neue Version erhält automatisch "LATEST"-Status
-
Alte Versionen verlieren "LATEST"-Status (bleiben aber erhalten)
-
Dokument ist fertig:
- Erscheint in "Generierte Dokumente"
- Kann heruntergeladen werden
- URLs sind sofort verfügbar
Dauer: Je nach Dokumentgröße 5-30 Sekunden. Die Generierung läuft im Hintergrund, Sie müssen nicht warten.
Mehrere Dokumente gleichzeitig
Sie können mehrere Dokumente in der Liste markieren und "📄 PDF generieren" ausführen - alle werden nacheinander im Hintergrund generiert.
Stabile URLs für externe Verlinkungen¶
Warum sind die URLs "stabil"?¶
Problem ohne stabile URLs:
Alte Lösung: /view/abc123def456...xyz/
↓
Dokument wird neu generiert
↓
Neue URL: /view/xyz789ghi012...uvw/
↓
Alle externen Links sind kaputt! ❌
Lösung mit stabilen URLs:
Stabile URL: /documents/aB3cD9eF2gH4iJ5k/latest/
↓
Dokument wird neu generiert (v1 → v2)
↓
Gleiche URL: /documents/aB3cD9eF2gH4iJ5k/latest/
↓
URL zeigt automatisch neue Version! ✅
Verwendung auf der Webseite¶
Empfohlen (stabile Latest-URL):
<a href="/documents/aB3cD9eF2gH4iJ5k/latest/">
Vereinssatzung (aktuelle Fassung)
</a>
👉 Vorteil: Link muss nie geändert werden, zeigt immer die neueste Version!
Spezifische Version (wenn alte Version verlinkt bleiben soll):
<a href="/documents/aB3cD9eF2gH4iJ5k/v1/">
Vereinssatzung v1.0 (historisch)
</a>
👉 Vorteil: Link zeigt immer die gleiche Version, egal wie oft neu generiert wird.
Sicherheit der URLs¶
Warum keine einfachen Namen wie /vereinssatzung/?
❌ Einfache Namen wären erratbar:
- /vereinssatzung/ → Jeder könnte das erraten
- /protokoll/ → Einfach zu finden
- /mitgliederliste/ → Unsicher!
✅ 16-Zeichen Token ist sicher:
- aB3cD9eF2gH4iJ5k → 4.700.000.000.000.000.000.000.000.000.000 Möglichkeiten
- Praktisch unmöglich zu erraten
- Nur wer den Link kennt, kann darauf zugreifen
Slug ist nur für Admin-Ansicht
Der automatisch erstellte Slug (z.B. "vereinssatzung") wird nur im Admin angezeigt, nicht in URLs verwendet!
Typische Anwendungsfälle¶
Anwendungsfall 1: Vereinssatzung mit Updates¶
Situation: Die Vereinssatzung muss alle 2 Jahre aktualisiert werden.
Setup (einmalig):
1. Dokumentvorlage "Satzung Standard" mit Logo und Kopfzeile erstellen
2. Dokumentinhalt "Vereinssatzung FVW" anlegen:
- Markdown-Inhalt der Satzung eingeben
- Variablen: {"version": "1.0", "approved_date": "01.01.2025"}
3. Erste PDF-Generierung → v1 wird erstellt
4. Token notieren: aB3cD9eF2gH4iJ5k
Webseite verlinken:
<a href="/documents/aB3cD9eF2gH4iJ5k/latest/">
Vereinssatzung (aktuelle Fassung)
</a>
Nach 2 Jahren - Satzung wird geändert:
1. Dokumentinhalt bearbeiten:
- Markdown-Text anpassen
- Variablen updaten: {"version": "2.0", "approved_date": "01.01.2027"}
2. Erneut "📄 PDF generieren" klicken
3. v2 wird erstellt (v1 bleibt als historische Version erhalten)
4. Webseiten-Link funktioniert weiter ohne Änderung! ✅
Ergebnis:
- /documents/aB3cD9eF2gH4iJ5k/latest/ → zeigt automatisch v2
- /documents/aB3cD9eF2gH4iJ5k/v1/ → alte Version bleibt abrufbar
- Webmaster muss nichts ändern!
Anwendungsfall 2: Monatliches Protokoll¶
Situation: Jeden Monat wird ein neues Vorstandsprotokoll erstellt.
Setup: 1. Dokumentvorlage "Protokoll Standard" mit Vereinslogo 2. Für jeden Monat neuen Dokumentinhalt anlegen: - "Vorstandsprotokoll Januar 2025" - "Vorstandsprotokoll Februar 2025" - etc. 3. Jedes Protokoll bekommt eigenen Token 4. PDF generieren für jedes Protokoll
Webseite:
<ul>
<li><a href="/documents/abc123/latest/">Protokoll Januar 2025</a></li>
<li><a href="/documents/def456/latest/">Protokoll Februar 2025</a></li>
<li><a href="/documents/ghi789/latest/">Protokoll März 2025</a></li>
</ul>
Wenn Protokoll korrigiert werden muss: 1. Dokumentinhalt bearbeiten 2. Neu generieren → v2 wird erstellt 3. Link funktioniert weiter (zeigt korrigierte Version)
Anwendungsfall 3: Historische Versionen anbieten¶
Situation: Alte Satzungsversionen sollen zur Nachvollziehbarkeit verfügbar bleiben.
Webseite:
<h2>Vereinssatzung</h2>
<p>
<a href="/documents/aB3cD9eF2gH4iJ5k/latest/">
📄 Aktuelle Fassung (v3.0)
</a>
</p>
<h3>Historische Versionen</h3>
<ul>
<li><a href="/documents/aB3cD9eF2gH4iJ5k/v2/">v2.0 (2023)</a></li>
<li><a href="/documents/aB3cD9eF2gH4iJ5k/v1/">v1.0 (2020)</a></li>
</ul>
Vorteil: Alle Versionen bleiben dauerhaft abrufbar, auch nach weiteren Updates.
Admin-Checkliste¶
Neue Dokumentvorlage anlegen¶
- [ ] Name: Aussagekräftiger Name gewählt?
- [ ] Generierungsmodus: LaTeX (professionell) oder HTML (einfach)?
- [ ] Logo: Vereinslogo hochgeladen (PNG empfohlen)?
- [ ] Template: Alle Platzhalter korrekt verwendet?
Dokumentinhalt erstellen¶
- [ ] Titel: Klar und eindeutig?
- [ ] Template: Richtige Vorlage ausgewählt?
- [ ] Markdown: Formatierung korrekt?
- [ ] Variablen: JSON-Format gültig? Alle
{{platzhalter}}definiert? - [ ] Aktiv: Status auf "Aktiv" gesetzt?
Vor PDF-Generierung prüfen¶
- [ ] Platzhalter: Alle im Template verwendeten Variablen auch definiert?
- [ ] Markdown: Keine Tippfehler oder Syntax-Fehler?
- [ ] Logo: Im Template hochgeladen und sichtbar?
Nach PDF-Generierung prüfen¶
- [ ] PDF-Vorschau: Sieht alles korrekt aus?
- [ ] Version: Richtige Versionsnummer angezeigt?
- [ ] URLs: Latest-URL funktioniert?
- [ ] Download: PDF lässt sich herunterladen?
Externe Verlinkung einrichten¶
- [ ] Token: Aus "URLs & Versionen" Tab kopiert?
- [ ] Latest-URL:
/documents/<token>/latest/verwendet (nicht v1, v2...)? - [ ] Test: Link funktioniert im Inkognito-Modus (ohne Login)?
- [ ] Webmaster: URL für Webseiten-Einbindung weitergegeben?
Problembehandlung¶
PDF-Generierung funktioniert nicht¶
Symptom: Nach Klick auf "PDF generieren" erscheint keine Erfolgsmeldung oder Fehler.
Mögliche Ursachen:
1. Template-Fehler: Platzhalter im Template nicht richtig geschrieben?
- Prüfen: Sind alle {{variablen}} mit doppelten geschweiften Klammern?
2. Fehlende Variablen: Wird im Template ein Platzhalter verwendet, der nicht definiert ist?
- Prüfen: Alle {{variablen}} im Template auch im JSON definiert?
3. JSON-Syntax-Fehler: Variablen nicht korrekt formatiert?
- Prüfen: Doppelte Anführungszeichen? Kommas? Geschweifte Klammern?
Tipp: Kontaktieren Sie den IT-Support, wenn die Generierung länger als 5 Minuten nicht abgeschlossen ist.
Stabile URL führt zu Fehler (404)¶
Symptom: Beim Klick auf /documents/<token>/latest/ erscheint "Seite nicht gefunden".
Mögliche Ursachen: 1. Kein PDF generiert: Wurde überhaupt ein PDF erstellt? - Prüfen: Gibt es Einträge unter "Generierte Dokumente"? 2. Nicht öffentlich: Ist das Dokument als "Öffentlich zugänglich" markiert? - Prüfen: Bei "Generierte Dokumente" → Status prüfen 3. Falscher Token: Token aus der URL korrekt kopiert? - Prüfen: 16 Zeichen? Keine Leerzeichen am Anfang/Ende?
Alte Version wird angezeigt¶
Symptom: Die /latest/ URL zeigt eine alte Version, obwohl neu generiert wurde.
Ursache: Neue Version hat nicht "LATEST"-Status erhalten.
Lösung: 1. Gehen Sie zu "Generierte Dokumente" 2. Finden Sie die neueste Version (höchste Versionsnummer) 3. Überprüfen Sie, ob der grüne "🟢 LATEST"-Badge sichtbar ist 4. Falls nicht: Kontaktieren Sie den IT-Support
Variablen werden nicht ersetzt¶
Symptom: Im PDF steht wörtlich {{author}} statt "Max Mustermann".
Ursache: Variable nicht im JSON definiert.
Lösung:
1. Gehen Sie zum Dokumentinhalt
2. Tab "Variablen" öffnen
3. Variable hinzufügen:
json
{
"author": "Max Mustermann"
}
4. Erneut PDF generieren
Logo wird nicht angezeigt¶
Symptom: Im PDF fehlt das Vereinslogo.
Mögliche Ursachen:
1. Logo nicht hochgeladen: Wurde das Logo im Template hochgeladen?
- Prüfen: "Dokumentvorlagen" → Template öffnen → Logo-Feld
2. Logo-Platzhalter fehlt: Wird {{logo_filename}} im Template verwendet?
- IT-Support kontaktieren für Template-Anpassung
Tipps & Best Practices¶
Markdown-Formatierung¶
Überschriften:
# Große Überschrift (Ebene 1)
## Mittlere Überschrift (Ebene 2)
### Kleine Überschrift (Ebene 3)
Textformatierung:
**fetter Text**
*kursiver Text*
***fett und kursiv***
Listen:
- Aufzählungspunkt 1
- Aufzählungspunkt 2
- Unterpunkt 2.1
- Unterpunkt 2.2
1. Nummerierter Punkt 1
2. Nummerierter Punkt 2
3. Nummerierter Punkt 3
Absätze:
Erster Absatz mit Text.
Zweiter Absatz mit Text.
(Leerzeile dazwischen!)
Variablen sinnvoll nutzen¶
Wiederverwendbare Werte:
{
"year": "2025",
"president": "Dr. Max Mustermann",
"club_name": "Fischereiverein Wangen e.V."
}
Im Markdown dann:
# Protokoll der Mitgliederversammlung {{year}}
Der Vorsitzende {{president}} eröffnet die Sitzung des {{club_name}}.
Vorteil: Werte müssen nur einmal geändert werden, nicht an jeder Stelle im Text!
Token-Verwaltung¶
Token dokumentieren: Notieren Sie wichtige Tokens für die Webseite:
Vereinssatzung: aB3cD9eF2gH4iJ5k
Beitragsordnung: xY9zW8vU7tS6rQ5p
Geschäftsordnung: mN4oP3qR2sT1uV0w
URL-Format merken: /documents/<token>/latest/ oder /latest/pdf/
Versionierung nutzen¶
Versionsnummern in Variablen:
{
"version": "2.1",
"approved_date": "15.03.2025",
"changes": "Anpassung §3 Abs. 2"
}
Im Markdown:
Version {{version}} | Genehmigt am: {{approved_date}}
Änderungen: {{changes}}
Historische Versionen behalten: Alte Versionen werden automatisch archiviert - löschen Sie sie nicht!
Änderungsverlauf¶
| Datum | Änderung | Verantwortlich |
|---|---|---|
| 30.10.2025 | Initiale Erstellung (Admin-Benutzer-Fokus) | Daniel Altiparmak |