# PDF OCR Hotfolder Verwandelt eingehende gescannte PDFs automatisch in **durchsuchbare PDFs** (PDF/A optional) per OCR. Hauptanwendung: Kunden-Scanner schiebt PDF in einen Ordner β€” Sekunden spΓ€ter liegt die OCR-Version im Ausgang oder wird in Nextcloud / per SFTP weitergeleitet. ## Features - πŸ” **OCR via ocrmypdf + Tesseract** (Library-Call, kein Subprozess-Overhead) - πŸ“‚ **Hotfolder via watchdog** β€” reagiert auf `created`, `moved`, `closed` Events - 🧠 **StabilitΓ€ts-Erkennung**: wartet bis Scanner fertig geschrieben hat - πŸ” **Parallelverarbeitung** mehrerer PDFs (ThreadPool, konfigurierbar) - βœ… **PDF/A-Output** (1, 2 oder 3) optional - πŸ›‘οΈ **veraPDF-Validierung** optional - ☁️ **Upload-Ziele**: lokaler Ordner, Nextcloud (WebDAV via Python), SFTP - πŸ“§ **E-Mail-Notify** (immer / nur Fehler / nie) - πŸ” **Service-User-Support** fΓΌr lokale **und AD-User mit lokaler UID** (SSSD/Winbind) - βš™οΈ Saubere systemd-Integration mit auto-Restart ## Schnellstart ```bash git clone https://gitea.sonith.de/sonith_ug/pdf-ocr-hotfolder.git cd pdf-ocr-hotfolder sudo ./install.sh ``` Der Installer fragt nach dem Service-User. StandardmÀßig wird ein lokaler System-User `pdfocr` angelegt. Wenn der User bereits existiert (z.B. AD via SSSD), wird er einfach ΓΌbernommen. Danach Konfiguration anpassen: ```bash sudo nano /etc/pdf-ocr-hotfolder/config.toml sudo systemctl restart pdf-ocr-hotfolder ``` Test: ```bash cp irgendein-scan.pdf /var/lib/pdf-ocr-hotfolder/incoming/ journalctl -u pdf-ocr-hotfolder -f ``` Nach wenigen Sekunden liegt das OCR-PDF unter `/var/lib/pdf-ocr-hotfolder/outgoing/OCR_irgendein-scan.pdf`. ## Verzeichnisse | Pfad | Zweck | |------|-------| | `/etc/pdf-ocr-hotfolder/config.toml` | Konfiguration | | `/var/lib/pdf-ocr-hotfolder/incoming` | Eingang (Scanner schreibt hier rein) | | `/var/lib/pdf-ocr-hotfolder/working` | Arbeitsverzeichnis wΓ€hrend OCR | | `/var/lib/pdf-ocr-hotfolder/outgoing` | Ausgang (fertige PDFs) | | `/var/lib/pdf-ocr-hotfolder/error` | PDFs, die nicht verarbeitet werden konnten | | `/opt/pdf-ocr-hotfolder/` | Code + venv | | `/var/log/pdf-ocr-hotfolder/` | Logs (zusΓ€tzlich zu journald) | ## Konfiguration VollstΓ€ndiges Beispiel: [`config.example.toml`](config.example.toml). Wichtigste Sektionen: ### `[ocr]` ```toml languages = "deu+eng" # Tesseract-Sprachen jobs = 4 # Threads pro PDF skip_text = true # bereits OCR-haltige Seiten ΓΌberspringen pdfa_level = "2" # "1", "2", "3" oder "" fΓΌr reines PDF deskew = true max_workers = 2 # parallele PDFs timeout = 1800 ``` ### `[upload.nextcloud]` ```toml enabled = true url = "https://cloud.example.com" username = "scanuser" password = "app-password" remote_path = "Scans/Inbox" ``` ### `[upload.sftp]` ```toml enabled = true host = "sftp.example.com" username = "scanuser" key_file = "/etc/pdf-ocr-hotfolder/sftp_key" remote_path = "/uploads" ``` ### `[notify.email]` ```toml enabled = true smtp_host = "smtp.example.com" smtp_port = 587 smtp_user = "alerts@example.com" smtp_password = "secret" from_addr = "PDF OCR " to_addrs = ["admin@example.com"] on = "errors" # always | errors | never ``` ## Service-Verwaltung ```bash sudo systemctl status pdf-ocr-hotfolder sudo systemctl restart pdf-ocr-hotfolder journalctl -u pdf-ocr-hotfolder -f ``` ## Update ```bash cd /pfad/zum/repo git pull sudo ./update.sh ``` Das Repo muss bestehen bleiben β€” `update.sh` kopiert daraus. ## Manueller Lauf (One-Shot) Bestehende PDFs im Eingang einmalig verarbeiten und beenden: ```bash sudo -u pdfocr /opt/pdf-ocr-hotfolder/venv/bin/python -m pdf_ocr_hotfolder \ --config /etc/pdf-ocr-hotfolder/config.toml --once ``` ## Troubleshooting ### Tesseract findet die Sprache nicht ```bash sudo apt install tesseract-ocr-deu tesseract-ocr-eng ``` ### "PriorOcrFoundError" ocrmypdf erkennt bereits vorhandenen OCR-Text. `skip_text = true` in der Config setzen. ### Berechtigungsprobleme bei AD-User Service-User braucht **rw** auf alle vier Verzeichnisse unter `/var/lib/pdf-ocr-hotfolder/`. Bei AD-User mit lokaler UID: ```bash sudo chown -R DOMAIN\\scanuser:DOMAIN\\scangroup /var/lib/pdf-ocr-hotfolder ``` ### veraPDF-Validierung schlΓ€gt immer fehl veraPDF binary prΓΌfen (`[verapdf].binary`). Wenn nicht zwingend gebraucht: `enabled = false`. ## Architektur ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” watchdog β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” ocrmypdf β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Scanner β”‚ ──────────────▢ β”‚ incoming/ β”‚ ─────────────▢ β”‚ working/ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ PDF-Datei β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ (Library) β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β”‚ optional veraPDF β”‚ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ outgoing/ β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β–Ό β–Ό β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Nextcloud β”‚ β”‚ SFTP β”‚ β”‚ E-Mail β”‚ β”‚ (WebDAV) β”‚ β”‚ (paramiko) β”‚ β”‚ Notify β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## Lizenz MIT β€” Β© Sonith UG --- **Version:** 0.1.0 **Repo:** https://gitea.sonith.de/sonith_ug/pdf-ocr-hotfolder