ca995a1c1f
- Add pdftk-java to Docker image for PDF page manipulation - Extend generate_backside() to repeat back content num_pages times so front and back PDFs have matching page counts for pdftk shuffle - Add build-duplex and build-blanko-duplex Makefile targets that combine front and back PDFs with alternating pages (front1, back1, front2, back2) - Document duplex targets in README Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
126 lines
3.7 KiB
Markdown
126 lines
3.7 KiB
Markdown
# Brevetkarten-PDF-Generator
|
||
|
||
LaTeX-basierter Generator für Audax Randonneurs Allemagne Brevetkarten mit Vorder- und Rückseite für den Duplexdruck.
|
||
|
||
## Voraussetzungen
|
||
|
||
- Docker
|
||
- Make
|
||
|
||
## Konfigurationsdateien
|
||
|
||
Vor dem ersten Build zwei Dateien aus den Beispielen anlegen und befüllen:
|
||
|
||
```bash
|
||
cp export_brevetcard.csv.example export_brevetcard.csv
|
||
cp event.yml.example event.yml
|
||
```
|
||
|
||
Beide Dateien sind in `.gitignore` eingetragen und werden nicht ins Repository übernommen.
|
||
|
||
### event.yml
|
||
|
||
Enthält alle veranstaltungsspezifischen Daten:
|
||
|
||
```yaml
|
||
event:
|
||
title: "Name der Veranstaltung"
|
||
km: "200"
|
||
date: "1. Januar 2025"
|
||
start_location: "Stadt, Ort"
|
||
club: "Clubname"
|
||
club_nr: "000000"
|
||
startzeit: "8:00"
|
||
|
||
backside:
|
||
"1_1": |
|
||
\vspace{2mm}
|
||
\textbf{Nr. 1:} Km 0 -- Startort\\
|
||
...
|
||
"1_2": "" # leer = Stempelfeld
|
||
...
|
||
```
|
||
|
||
Die `backside`-Sektion belegt die 12 Zellen der Rückseite (3 Zeilen × 4 Spalten, Schlüssel `"Zeile_Spalte"`). Der Inhalt ist freies LaTeX. Leere Zellen (`""`) dienen als Stempelfelder.
|
||
|
||
### Export Brevetkarte.csv
|
||
|
||
Teilnehmerdaten im Format:
|
||
|
||
```
|
||
Startnr, Nachname, Vorname, Straße, PLZ, Ort, Land, Medaille
|
||
```
|
||
|
||
Siehe `export_brevetcard.csv.example` für das vollständige Format.
|
||
|
||
## Verwendung
|
||
|
||
### Personalisierte Karten erzeugen und bauen
|
||
|
||
```bash
|
||
make build-personalized
|
||
```
|
||
|
||
Führt folgende Schritte aus:
|
||
1. `generate_cards.py` liest `Export Brevetkarte.csv` + `event.yml`
|
||
2. Erzeugt `brevetkarte-personalized.tex` (Vorderseite, eine Karte pro Teilnehmer)
|
||
3. Erzeugt `brevetkarte-rueckseite.tex` (Rückseite mit Kontrollpunkten aus event.yml)
|
||
4. Kompiliert beide .tex-Dateien zu PDFs
|
||
|
||
### Duplex-PDF erzeugen
|
||
|
||
```bash
|
||
make build-duplex # personalisierte Karten
|
||
make build-blanko-duplex # Blanko-Karten
|
||
```
|
||
|
||
Erzeugt ein einzelnes PDF mit abwechselnden Vorder- und Rückseiten für den direkten Duplexdruck: Seite 1 Vorderseite, Seite 2 Rückseite, Seite 3 nächste Vorderseite, usw. Erfordert kein manuelles Zusammenführen zweier Dateien.
|
||
|
||
### Blanko-Karten erzeugen und bauen
|
||
|
||
```bash
|
||
make build-blanko
|
||
```
|
||
|
||
Erzeugt Blanko-Karten ohne Teilnehmerdaten — keine `export_brevetcard.csv` erforderlich. Sinnvoll für Nachmeldungen oder als Reservekarten vor Ort. Die Veranstaltungsdaten aus `event.yml` werden übernommen, die Teilnehmerfelder bleiben leer.
|
||
|
||
Ausgabe: `brevetkarte-blanko.pdf` (Vorderseite) + `brevetkarte-rueckseite.pdf` (Rückseite)
|
||
|
||
### Einzelne Schritte
|
||
|
||
```bash
|
||
# Nur tex-Dateien generieren (ohne Docker)
|
||
make generate
|
||
|
||
# Nur Rückseite kompilieren (nach generate)
|
||
make build-back
|
||
```
|
||
|
||
### Weitere Befehle
|
||
|
||
```bash
|
||
make build-image # Docker-Image bauen
|
||
make shell # Interaktive Shell im Container
|
||
make clean # Erzeugte Dateien löschen (.aux, .log, .pdf)
|
||
make clean-all # Alles löschen inkl. Docker-Image
|
||
make help # Alle Befehle anzeigen
|
||
```
|
||
|
||
## Dateien
|
||
|
||
| Datei | Beschreibung |
|
||
|---|---|
|
||
| `event.yml.example` | Vorlage für Veranstaltungsdaten (→ als `event.yml` kopieren) |
|
||
| `export_brevetcard.csv.example` | Vorlage für Teilnehmerdaten (→ als `export_brevetcard.csv` kopieren) |
|
||
| `brevetkarte-template.tex` | Vorlage Vorderseite (Platzhalter aus CSV + event.yml) |
|
||
| `brevetkarte-rueckseite-template.tex` | Vorlage Rückseite (Zellplatzhalter aus event.yml) |
|
||
| `generate_cards.py` | Generiert .tex-Dateien aus Templates + Konfiguration |
|
||
| `cyclist-logo.png` | Audax Randonneurs Logo |
|
||
| `Dockerfile` | Docker-Image-Definition (debian:bookworm-slim + TeX Live) |
|
||
| `Makefile` | Build-Automatisierung |
|
||
|
||
## Duplexdruck
|
||
|
||
1. `brevetkarte-personalized.pdf` auf einer Seite drucken
|
||
2. `brevetkarte-rueckseite.pdf` auf der Rückseite drucken
|
||
3. Blatt horizontal in der Mitte schneiden → zwei separate Brevetkarten |