feat(files): gescannte/bildbasierte PDFs als Bilder rendern (Vision)

read_file gab bei Scan-PDFs (kein extrahierbarer Text) nur nutzlose Rohbytes
zurueck -> claude.ai konnte sie nicht lesen. Jetzt: PyMuPDF rendert die Seiten
als PNG (150 dpi, max 20 Seiten) -> ImageContent, das LLM liest sie per Vision.
Verschluesselte/kaputte PDFs bleiben graceful. TestFileTypes scanned.pdf -> image.
Produktiv-Fix fuer alle User. Dep: pymupdf (requirements-extra.txt). 76 Tests gruen.
This commit is contained in:
Stefan Lohmaier
2026-06-19 08:27:08 +02:00
parent 85f5e26384
commit abeacfc3b8
4 changed files with 37 additions and 5 deletions
+9
View File
@@ -93,3 +93,12 @@ Umlauten/Leerzeichen/Klammern, Unicode/Emoji/RTL-Inhalt, Datei ohne Endung,
passwortgeschuetztes PDF + ZIP, uebergrosse Datei (26 MB > 25-MB-Limit ->
"Datei zu gross"). Alle werden graceful behandelt (kein Crash). Generator:
`gen_edge.py` (braucht pikepdf + zip), Upload via `upload_ocis.sh`.
## Verbesserung: bildbasierte/gescannte PDFs (2026-06-19)
Frueher gab `read_file` bei Scan-PDFs (kein extrahierbarer Text) nur Rohbytes
(`EmbeddedResource`) zurueck — claude.ai konnte den Inhalt nicht lesen. Jetzt werden
solche PDFs mit **PyMuPDF** seitenweise als **PNG-Bilder** (150 dpi, max 20 Seiten)
gerendert und als `ImageContent` zurueckgegeben -> das LLM liest sie per Vision.
Produktiv-Feature (gilt fuer alle User). Test: `TestFileTypes` scanned.pdf -> `image`.
Runtime-Dep: `pymupdf` (siehe `requirements-extra.txt`).
+1 -1
View File
@@ -439,7 +439,7 @@ class TestFileTypes:
("testdata/text/readme.md", {"text"}),
("testdata/text/data.csv", {"text"}),
("testdata/documents/document.pdf", {"text"}), # Text-PDF -> extrahiert
("testdata/documents/scanned.pdf", {"text", "resource"}),# Scan-PDF
("testdata/documents/scanned.pdf", {"image"}), # Scan-PDF -> als Bild gerendert
("testdata/documents/report.docx", {"text"}),
("testdata/documents/budget.xlsx", {"text"}),
("testdata/documents/slides.pptx", {"text"}),