Files
pdf_to_ics/README.md

263 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PDF zu ICS Konverter - Dienstplan Importer
Dieses Tool extrahiert Kalenderdaten aus Dienstplan-PDFs und konvertiert sie in das iCalendar-Format (ICS), das von den meisten Kalenderanwendungen importiert werden kann.
## 🎯 Zwei Versionen verfügbar
### 1. **GUI-Version** (Grafische Oberfläche) - Empfohlen!
Benutzerfreundliche grafische Oberfläche mit Drag & Drop Support.
```bash
./start_gui.sh
```
**Features:**
- ✨ Drag & Drop für PDF-Dateien
- 📋 Mehrere PDFs gleichzeitig verarbeiten
- 📁 Ausgabe-Verzeichnis frei wählbar
- 📊 Live-Log und Fortschrittsanzeige
- 💾 Merkt sich letzte Verzeichnisse
**Voraussetzung:** Tkinter muss installiert sein (siehe [GUI_README.md](GUI_README.md))
### 2. **CLI-Version** (Kommandozeile)
Textbasiertes Menü für die Kommandozeile.
```bash
./start.sh
```
**Features:**
- ⚡ Funktioniert überall ohne zusätzliche Abhängigkeiten
- 🔄 Automatische Verarbeitung aller PDFs im Verzeichnis
- 📝 Textbasiertes interaktives Menü
## Features
✅ Extrahiert Dienstplan-Informationen aus PDFs
✅ Erkennt Schicht-Zeitangaben (z.B. 04:51-15:46)
✅ Handhabt Nachtschichten korrekt (über Mitternacht hinaus)
✅ Erstellt Standard-konforme ICS-Dateien
✅ Unterstützt mehrere PDFs gleichzeitig
✅ GUI mit Drag & Drop (optional)
✅ CLI-Menü für schnelle Nutzung
## Installation
### Windows (Empfohlen)
1. Installieren Sie **Python 3.10+** und aktivieren Sie bei der Installation die Option **"Add Python to PATH"**.
2. Öffnen Sie den Projektordner.
3. Starten Sie die GUI per Doppelklick auf `start_gui.cmd`.
Beim ersten Start wird automatisch eine virtuelle Umgebung (`.venv`) erstellt und alle benötigten Pakete installiert.
**Alternative (CLI):** Doppelklick auf `start.cmd`.
**Falls Python nicht gefunden wird (CMD im Projektordner):**
```bat
py -3 -m venv .venv --upgrade-deps
.\.venv\Scripts\python.exe gui.py
```
### Schnellstart (Empfohlen)
**Für GUI-Version:**
```bash
./start_gui.sh
```
Siehe [GUI_README.md](GUI_README.md) für Tkinter-Installation.
**Für CLI-Version:**
```bash
./start.sh
```GUI-Version (Empfohlen)
1. Starten Sie die GUI:
```bash
./start_gui.sh
```
2. Fügen Sie PDF-Dateien hinzu:
- Klicken Sie auf " PDF hinzufügen", oder
- Ziehen Sie PDF-Dateien in die Liste (Drag & Drop)
**Interaktives Menü:**
```bash
./start.sh
```
Dann wählen Sie im Menü die gewünschte Option.
### Erweiterte Nutzung (Python-Modul)abe-Verzeichnis (optional)
4. Klicken Sie auf "📄 ICS Datei erstellen"
Die GUI merkt sich Ihre letzten Verzeichnisse für schnelleren Zugriff!
### CLI-Version
**Schnellstart:**
Beide Skripte erstellen automatisch eine Python Virtual Environment und installieren alle benötigten Abhängigkeiten.
### Manuelle Installation
Die erforderlichen Dependencies sind bereits installiert. Falls Sie das Projekt neu einrichten:
```bash
python3 -m venv .venv
source .venv/bin/activate
pip install pdfplumber icalendar pypdf2 pytz packaging
```
## Verwendung
### Schnellstart (CLI)
1. Kopieren Sie Ihre Dienstplan-PDF-Dateien in ein Verzeichnis
2. Führen Sie das Skript aus:
```bash
python3 pdf_to_ics.py
```
Das Tool findet automatisch alle `.pdf` Dateien im aktuellen Verzeichnis und erstellt entsprechende `.ics` Dateien.
### Kommandozeilen-Optionen
```bash
# Alle PDFs im aktuellen Verzeichnis konvertieren
python3 pdf_to_ics.py
# PDFs aus einem bestimmten Verzeichnis konvertieren
python3 pdf_to_ics.py --input ./pdfs
# PDFs in anderes Verzeichnis speichern
python3 pdf_to_ics.py --input ./pdfs --output ./ics_dateien
# Ruhetage ausschließen
python3 pdf_to_ics.py --exclude-rest
# Einzelne PDF-Datei konvertieren
python3 pdf_to_ics.py /pfad/zur/datei.pdf
# Mit detaillierter Ausgabe
python3 pdf_to_ics.py --input ./pdfs -v
# Hilfe anzeigen
python3 pdf_to_ics.py --help
```
**Verfügbare Optionen:**
| Option | Kurzform | Beschreibung |
|--------|----------|-------------|
| `--input DIR` | `-i` | Eingabe-Verzeichnis mit PDF-Dateien (Standard: aktuelles Verzeichnis) |
| `--output DIR` | `-o` | Ausgabe-Verzeichnis für ICS-Dateien (Standard: Eingabe-Verzeichnis) |
| `--exclude-rest` | `-e` | Ruhetage ausschließen (Ruhe, R56, R36, vRWF48, RWE, vR48) |
| `--verbose` | `-v` | Detaillierte Ausgabe anzeigen |
| `--help` | `-h` | Hilfe anzeigen |
### Erweiterte Nutzung
Sie können auch direkt mit dem Python-Modul arbeiten:
```python
from pdf_to_ics import extract_dienstplan_data, create_ics_from_dienstplan
# PDF verarbeiten
dienstplan = extract_dienstplan_data('meine_pdf.pdf')
# ICS erstellen
create_ics_from_dienstplan(dienstplan, 'mein_kalender.ics')
```
## Dateiformat
### ICS-Datei importieren
Die erstellte `.ics` Datei kann in folgende Kalenderanwendungen importiert werden:
- **Outlook**: Datei → Öffnen und exportieren → Importieren
- **Google Kalender**: Einstellungen → Kalender importieren
- **iCal/macOS**: Doppelklick auf die .ics Datei
- **Thunderbird**: Kalender → Kalender importieren
- **Android**: Mit einer Kalender-App öffnen
- **LibreOffice**: Datei → Öffnen
## Struktur der extrahierten Daten
Das Tool extrahiert folgende Informationen aus der PDF:
- **Name und Personalnummer**: Des Mitarbeiters
- **Betriebshof**: Standort
- **Sollarbeitszeit**: Gewünschte Arbeitszeit pro Monat
- **Events**: Einzelne Schichten mit:
- Datum
- Dienstart (z.B. "36234", "Ruhe", "Dispo")
- Zeitangabe (falls vorhanden)
## Output
Für jede verarbeitete PDF wird eine entsprechende ICS-Datei erstellt:
```
2026-02-23 DB Köhler00100718_März2026.pdf → 2026-02-23 DB Köhler00100718_März2026.ics
```
Die ICS-Datei enthält ein Event für jeden Arbeitstag mit:
- **Titel**: Name - Dienstart
- **Beschreibung**: Dienstart und Betriebshof
- **Zeit**: Mit aktueller Zeitzone (Europe/Berlin)
## Fehlerbehebung
### Keine Events gefunden?
- Stellen Sie sicher, dass die PDF das erwartete Tabellenformat hat
- Überprüfen Sie die Dateiname und die PDF-Struktur
### Zeitzone falsch?
- Die aktuelle Einstellung ist Europe/Berlin
- Zum Ändern: Bearbeiten Sie die Zeile in `pdf_to_ics.py`:
```python
tz = pytz.timezone('Europe/Berlin') # Ändern SIe diesen Wert
```
## Technische Details
### Projektstruktur
```
ICS-Import/
├── pdf_to_ics.py # Core-Konvertierungslogik
├── gui.py # GUI-Version (Tkinter)
├── menu.py # CLI-Menü
├── start_gui.sh/cmd # GUI-Startskripte
├── start.sh/cmd # CLI-Startskripte
├── README.md # Diese Datei
└── GUI_README.md # GUI-spezifische Dokumentation
```
### Technische Spezifikationen
- **Abhängigkeiten**: pdfplumber, icalendar, pytz, pypdf2, packaging
- **Optional für GUI**: tkinter (Python-Standard), tkinterdnd2 (Drag & Drop)
- **Python-Version**: 3.6+
- **Format**: iCalendar 2.0 (RFC 5545)
- **Konfiguration**: `~/.pdf_to_ics_config.json` (GUI-Einstellungen)
## Lizenz
Dieses Tool ist zur privaten Verwendung gedacht.
---
## 📚 Weitere Dokumentation
- **[GUI_README.md](GUI_README.md)** - Ausführliche GUI-Dokumentation und Tkinter-Installation
- **[QUICKSTART.md](QUICKSTART.md)** - Schnellanleitung für den Import in verschiedene Kalender
- **[ZUSAMMENFASSUNG.md](ZUSAMMENFASSUNG.md)** - Projekt-Übersicht und technische Details