Files
pdf-ocr-hotfolder/config.example.toml
T
techadmin 578472872e fix: Fehlerzaehlung, Upload-Fehler und ocr.timeout scharf (v0.4.0)
- [ocr].timeout wird als tesseract_timeout (pro Seite) an ocrmypdf
  durchgereicht; Default 1800 -> 300, 0 = ocrmypdf-Default
- Exceptions nach dem OCR zaehlen als Fehler, Datei wird nach error/ gerettet
- Fehlgeschlagene Uploads zaehlen als Fehler und loesen Fehler-Mail aus
- name_mode wird im Preflight geprueft, nicht erst pro Datei
- Fehlende [paths]-Sektion -> ConfigError mit klarer Meldung statt KeyError
- Stabilitaets-Timeout zaehlt als Fehler (--once liefert Exit 1)
- upload_folder nutzt shutil.copyfile statt read_bytes/write_bytes
- OcrConfig.pdfa_level Default "2" -> "" (Ghostscript-Bug, Issue #3)
- 35 neue Tests (92 gesamt), pytest.ini
- AI_AGENT_BRIEFING.md auf Stand 0.4.0 gebracht

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 21:01:38 +02:00

106 lines
3.5 KiB
TOML

# PDF OCR Hotfolder — Konfiguration
# Speichern als /etc/pdf-ocr-hotfolder/config.toml
[paths]
# Eingangsverzeichnis: hier landen gescannte PDFs
incoming = "/var/lib/pdf-ocr-hotfolder/incoming"
# Ausgangsverzeichnis: fertige durchsuchbare PDFs
outgoing = "/var/lib/pdf-ocr-hotfolder/outgoing"
# Arbeitsverzeichnis (während Verarbeitung)
working = "/var/lib/pdf-ocr-hotfolder/working"
# Fehlerverzeichnis: PDFs, die nicht verarbeitet werden konnten
error = "/var/lib/pdf-ocr-hotfolder/error"
[ocr]
# Tesseract-Sprachen (z.B. "deu", "deu+eng")
languages = "deu+eng"
# Anzahl Threads pro PDF (ocrmypdf --jobs)
jobs = 4
# Bereits OCR-haltige Seiten überspringen statt neu zu OCRen
skip_text = true
# Auflösung für gerasterte Seiten
oversample = 300
# PDF/A-Konformitätsstufe ("1", "2", "3" oder leer für keinen PDF/A-Output)
# ACHTUNG: Ghostscript 10.0.0 bis 10.02.0 (Debian 12 default!) haben einen Bug,
# der mit pdfa_level + skip_text=true ocrmypdf komplett blockiert.
# Sicherer Default ist "" — nur auf "1"/"2"/"3" setzen, wenn gs >= 10.02.1 installiert ist.
pdfa_level = ""
# Schiefe Scans automatisch begradigen
deskew = true
# Hintergrund säubern
clean = false
# Maximale parallele PDFs (Hauptsystem hat selten mehr als 1-2 gleichzeitig)
max_workers = 2
# Max. Sekunden, die Tesseract pro SEITE laufen darf (0 = kein Limit).
# ocrmypdf kennt kein Gesamt-Timeout pro Dokument, nur dieses Seiten-Limit
# (ocrmypdf-Option --tesseract-timeout). Läuft eine Seite in den Timeout,
# wird sie ohne Textebene ins Ergebnis übernommen; die Verarbeitung der
# restlichen Seiten läuft weiter.
# 0 = wir geben kein Limit vor und überlassen es dem ocrmypdf-Default.
timeout = 300
[output]
# Wie soll die Ziel-Datei im outgoing/-Ordner benannt werden?
# "prefix" : name_tag wird vor den Dateinamen gestellt (OCR_scan.pdf)
# "suffix" : name_tag wird vor die Extension gestellt (scan_OCR.pdf)
# "none" : Dateiname bleibt wie das Original
name_mode = "prefix"
# Verbatim einzufügender String. Leerer String = kein Tag (wie mode="none").
# Beispiele: "OCR_", "[OCR]_", "_OCR", "_searchable"
name_tag = "OCR_"
# Was passiert mit dem Original, wenn OCR erfolgreich war?
# "delete" : Original wird gelöscht (alter Standard)
# "archive" : Original wird in archive_dir verschoben
original_on_success = "delete"
# Absoluter Pfad; nur relevant wenn original_on_success = "archive"
archive_dir = ""
[verapdf]
# PDF/A-Validierung (optional)
enabled = false
binary = "/opt/verapdf/verapdf"
flavour = "1b"
# Upload-Ziele — beliebig viele aktivierbar.
# Wenn alle deaktiviert sind, bleibt das fertige PDF einfach im outgoing-Ordner.
[upload.folder]
enabled = true
# Wenn leer, wird [paths].outgoing verwendet
target = ""
[upload.nextcloud]
enabled = false
url = "https://cloud.example.com"
username = "scanuser"
password = "app-password"
# Zielpfad relativ zum User-Root, z.B. "Scans/Inbox"
remote_path = "Scans/Inbox"
verify_ssl = true
[upload.sftp]
enabled = false
host = "sftp.example.com"
port = 22
username = "scanuser"
# Entweder Key-Datei oder Passwort
key_file = "/etc/pdf-ocr-hotfolder/sftp_key"
password = ""
remote_path = "/uploads"
[notify.email]
enabled = false
smtp_host = "smtp.example.com"
smtp_port = 587
smtp_user = "alerts@example.com"
smtp_password = "secret"
use_starttls = true
from_addr = "PDF OCR Hotfolder <alerts@example.com>"
to_addrs = ["admin@example.com"]
# Wann benachrichtigen: "always" | "errors" | "never"
on = "errors"
[logging]
# DEBUG | INFO | WARNING | ERROR
level = "INFO"