OCR-Pipeline für Bild-/PDF-Anhänge, eigener Mail-OCR-Pfad unabhängig vom
DMS-Board. Direkte Vorbedingung für SRC-10.
- ocr.go: zustandsloses Paket (wie crypto/dedup), kennt weder Mandant
noch Speicher. ExtractTextFromImage ruft tesseract (deu+eng) mit fester
Argumentliste auf. HasTextLayer/ExtractTextFromPDF nutzen pdftotext zur
Erkennung einer vorhandenen Textebene (direkt übernommen, kein
unnötiges OCR) und rastern nur bei fehlender Textebene über pdftoppm
(300dpi) jede Seite für Tesseract.
- Bekannten Fehler vermieden (archivmail-Sprintf-WHERE-Muster): keine
SQL-Klauselbildung, ausschließlich exec.CommandContext mit fester
Argumentliste, keine Shell.
- testpdf_test.go: Testfixtures (Vektor-Text-PDF, Bild-only-PDF mit
eingebettetem JPEG) vollständig in Go erzeugt, keine externe
Bibliothek, keine Testdateien im Repo.
Prüfungen (alle real durchgeführt, siehe mail/docs/SRC-07-PRUEFPROTOKOLL.md):
1. TestExtractTextFromImage_KnownTextRecognized: reales gerastertes Bild,
Text real korrekt erkannt.
2. TestExtractTextFromPDF_SkipsOCRWhenTextLayerPresent: echtes Vektor-
Text-PDF, OCR real übersprungen.
3. TestExtractTextFromPDF_ThroughputIsAcceptable: 3,48s/Anhang real
gemessen (Ziel 8s/Anhang).
Zusätzlich TestExtractTextFromPDF_PerformsOCRWhenNoTextLayer für
Akzeptanzkriterium 1 (gescannte PDFs) end-zu-Ende.
Kein Umbau: search/dedup/indexworker/storage/crypto/encstorage/
savedsearch unverändert.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HhgFcLS8tYMhDJpP74C6AQ