Tesseract OCR für PDF
und durchsuchbare PDFs.
Der komplette, getestete Leitfaden für OCR von PDFs mit Tesseract: Seiten rasterisieren, durchsuchbare PDFs erstellen, OCRmyPDF und pdfsandwich nutzen, durchgängig in Python umsetzen und die häufigsten Fehler beheben.
Kurzfassung (ein Befehl)
Für ein echtes mehrseitiges PDF ist OCRmyPDF der schnellste Weg.
pip install ocrmypdf # oder: apt install ocrmypdf
ocrmypdf eingabe.pdf ausgabe.pdfKein OCRmyPDF? Rasterisieren Sie und nutzen Sie die Tesseract-CLI direkt — siehe unten.
Warum PDFs rasterisiert werden müssen
Tesseract erkennt Bilder, keine PDF-Container.
Ein PDF ist ein Container: Es kann Vektortext, eingebettete Schriften oder gescannte Seitenbilder enthalten. Tesseract liest Rasterbilder (TIFF, PNG, JPEG, WebP …), daher müssen Seiten zuerst in Bilder umgewandelt werden. Wählen Sie den Rasterizer je nach Installation:
| Tool | Installation | Hinweise |
|---|---|---|
pdftoppm (poppler) | apt install poppler-utils | Schnell, skriptbar, die klassische Wahl |
pdftocairo (poppler) | poppler-utils | Ähnlich zu pdftoppm, Cairo-Ausgabe |
| ImageMagick | apt install imagemagick | convert -density 300 in.pdf out.tif |
| PyMuPDF | pip install pymupdf | Reines Python, keine externen Binaries |
| pdf2image | pip install pdf2image | Python-Wrapper um poppler |
# PDF -> ein PNG pro Seite bei 300 DPI
pdftoppm -png -r 300 eingabe.pdf seiteDie DPI ist am wichtigsten: 300 DPI ist der Standard; 600 DPI für kleine Schriften oder Archivierung; unter 200 DPI vermeiden.
Durchsuchbares PDF mit der Tesseract-CLI erstellen
Ein Bild wird mit der Ausgabe-Konfiguration pdf zu einer durchsuchbaren PDF-Seite.
# Bild -> durchsuchbares PDF
tesseract seite-1.png ausgabe pdf
# Nur Textebene (ohne sichtbares Bild)
tesseract scan.png ausgabe textonly_pdf
# Mehrere Seiten in ein PDF: Bildliste übergeben
tesseract bildliste.txt ausgabe pdfFür ein mehrseitiges PDF schreiben Sie jeden Bildpfad in eine eigene Zeile in bildliste.txt. Vollständige Formatreferenz: Dokumentation.
Methode B — OCRmyPDF (empfohlen für echte PDFs)
OCRmyPDF übernimmt Rasterisieren, OCR, Entzerren, Drehen und die unsichtbare Textebene in einem Befehl.
ocrmypdf eingabe.pdf ausgabe.pdf # Basis
ocrmypdf -l eng+deu eingabe.pdf ausgabe.pdf # Sprachen
ocrmypdf --deskew --rotate-pages eingabe.pdf ausgabe.pdf
ocrmypdf --optimize 2 eingabe.pdf ausgabe.pdf # Datei verkleinern
ocrmypdf --skip-text eingabe.pdf ausgabe.pdf # Seiten mit Text behaltenOCRmyPDF nutzt Tesseract und benötigt Ghostscript und die poppler-Tools. Nützliche Flags: --force-ocr, --redo-ocr, --pages 1-10.
Methode C — pdfsandwich
Ein leichterer Wrapper, der eine Textebene hinzufügt und Vorverarbeitung wie Entzerren durchführt.
pdfsandwich scan.pdf # erzeugt scan_ocr.pdf
pdfsandwich -lang eng+deu scan.pdfMethode D — Python von Anfang bis Ende
Nutzen Sie pdf2image zum Rasterisieren und pytesseract für das durchsuchbare PDF, dann mit pypdf zusammenführen.
import io, pytesseract
from pdf2image import convert_from_path
from pypdf import PdfWriter, PdfReader
pages = convert_from_path("eingabe.pdf", dpi=300) # benötigt poppler
writer = PdfWriter()
for page in pages:
pdf_bytes = pytesseract.image_to_pdf_or_hocr(page, extension="pdf", lang="deu")
writer.add_page(PdfReader(io.BytesIO(pdf_bytes)).pages[0])
with open("ausgabe.pdf", "wb") as f:
writer.write(f)Unter Windows übergeben Sie den poppler-bin-Ordner mit poppler_path=. Mehr Details in der pytesseract-Anleitung.
Welche Methode soll ich verwenden?
| Methode | Ideal für | Einrichtung | Mehrseitig |
|---|---|---|---|
| OCRmyPDF | Echte PDFs, Automatisierung | Ghostscript + poppler | Ja, in einem Befehl |
| pdfsandwich | Schnelle Textebene mit Vorverarbeitung | poppler + ImageMagick | Ja |
| Tesseract-CLI | Bilder oder Bildlisten | Nur Tesseract | Über eine Bildliste |
| Python (pdf2image) | Pipelines und eigene Logik | poppler + pytesseract | Schleife und Zusammenführen |
Layout-Treue und Textüberlagerung
Warum durchsuchbare PDFs manchmal verschoben aussehen und wie Sie die Geometrie erhalten.
- Die unsichtbare Textebene wird über die OCR-Wortboxen platziert; bei falscher DPI kann die Überlagerung abweichen.
- Nutzen Sie
hOCR- oderALTO-Ausgabe, wenn Sie exakte Wortkoordinaten benötigen. pdftoppm -r 300und dieselbe Seitengröße halten die Überlagerung ausgerichtet.- Für komplexe Layouts bevorzugen Sie OCRmyPDF, das das Originalbild erhält und die Ebene an Ort und Stelle hinzufügt.
Qualität und Performance
- DPI: 300 Standard, 600 für kleine Schriften oder Archivierung.
- Seitenbereiche: nur verarbeiten, was nötig ist (
--pagesbei OCRmyPDF). - Parallelität: Seiten parallel OCR-en und dann zusammenführen.
- Dateigröße:
--optimize/ JPEG-Kompression oder DPI nach dem OCR reduzieren. - Vorverarbeitung: Entzerren und Entrauschen vor dem OCR.
Fehlerbehebung
| Symptom | Ursache | Lösung |
|---|---|---|
Unable to get page count. Is poppler installed? | pdf2image findet poppler nicht | Installieren Sie poppler-utils oder setzen Sie poppler_path unter Windows. |
| Ausgabe-PDF ohne durchsuchbaren Text | OCR lief nicht oder falsche Sprache | Erfolg prüfen und -l/--language auf die Dokumentsprache setzen. |
| Textüberlagerung ist verschoben | Falsche DPI oder Seitengröße | Bei 300 DPI mit Originalgröße rasterisieren. |
| Ausgabedatei ist riesig | Verlustfreie Bilder bei 600 DPI | --optimize / JPEG nutzen oder DPI reduzieren. |
| Passwortgeschütztes PDF schlägt fehl | Verschlüsselte Eingabe | Zuerst entschlüsseln oder das Passwort-Flag des Tools nutzen. |
Häufige Fragen zu PDF
Wie mache ich ein PDF durchsuchbar?
Nutzen Sie ocrmypdf eingabe.pdf ausgabe.pdf oder rasterisieren Sie die Seiten und führen Sie tesseract seite.tif ausgabe pdf aus.
Warum liest Tesseract ein PDF nicht direkt?
Tesseract erkennt Rasterbilder, daher müssen PDF-Seiten zuerst in Bilder umgewandelt werden.
Welche DPI soll ich verwenden?
300 DPI für die meisten Dokumente; 600 DPI für kleine Schriften oder Archivierung.
Kann ich ein PDF in Python OCR-en?
Ja — nutzen Sie pdf2image mit poppler und pytesseract.image_to_pdf_or_hocr und führen Sie die Seiten mit pypdf zusammen.
Wie bleibt das Layout exakt?
Verwenden Sie dieselbe Seitengröße und DPI und bevorzugen Sie OCRmyPDF, das das Originalbild erhält und die Textebene darüberlegt.