PDF zu Markdown in Python konvertieren
PDFs in Markdown zu konvertieren ist zum Standard-Vorverarbeitungsschritt für RAG-Pipelines und LLM-Workflows geworden — Markdown bewahrt die Überschriften und Tabellen, über die Modelle Struktur verstehen, bei einem Bruchteil der Tokens. Python bietet mehrere gute Optionen, jede mit echten Trade-offs. Hier sind die vier, die zählen — mit lauffähigem Code für jede.
Warum Markdown — und warum das schwerer ist, als es aussieht
LLMs verarbeiten Markdown außergewöhnlich gut: Überschriften markieren Abschnittsgrenzen, Pipe-Tabellen halten tabellarische Daten ausgerichtet, und Listen bleiben Listen. Roh aus der PDF extrahierter Text verliert all das — und die PDF-Binärdatei direkt einzuspeisen ist für die meisten Pipelines keine Option. Deshalb konvertiert praktisch jeder ernsthafte RAG-Stack Dokumente vor dem Chunking und Embedding zu Markdown.
Der schwierige Teil: PDFs enthalten keine Struktur, sondern Zeichen an x/y-Koordinaten. Ein Konverter muss zurückrechnen, welche Zeilen Überschriften sind (aus der Schriftgröße), welche Wörter eine Tabelle bilden (aus der Ausrichtung) und wie die Lesereihenfolge lautet (aus der Layout-Analyse). Wie gut Bibliotheken das können, unterscheidet sich enorm — genau deshalb ist die Wahl wichtig.
Eine zweite Komplikation: Gescannte PDFs enthalten überhaupt keinen Text, nur Bilder von Seiten. Nur einige der folgenden Optionen kommen damit klar — per OCR.
Option 1: PyMuPDF4LLM — schnell und leichtgewichtig
PyMuPDF4LLM ist eine dünne Schicht über PyMuPDF (fitz), gebaut speziell für LLM-Pipelines: pip install pymupdf4llm, dann md = pymupdf4llm.to_markdown("doc.pdf") — eine Zeile, und sehr schnell: Die meisten Dokumente sind in deutlich unter einer Sekunde verarbeitet.
Die Bibliothek erkennt Überschriften an Schriftgrößen, rendert Tabellen als Pipe-Tabellen und kann Seiten-Chunks mit Metadaten ausgeben — direkt bereit für LlamaIndex oder LangChain. Für digital erzeugte PDFs mit unkomplizierten Layouts — Berichte, Dokumentation, Papers ohne exotische Formatierung — ist sie ein exzellenter Default.
Grenzen: kein OCR, gescannte Seiten kommen also leer zurück. Komplexe mehrspaltige Layouts und verschachtelte Tabellen können durcheinandergeraten, weil die zugrunde liegenden Heuristiken Geschwindigkeit über tiefe Layout-Analyse stellen. Lizenzhinweis: PyMuPDF steht unter AGPL — für interne Tools unproblematisch, aber vor dem Einbau in ein kommerzielles Produkt mit der Rechtsabteilung klären.
Option 2: Marker — höchste Qualität, braucht eine GPU
Marker nutzt eine Pipeline aus Deep-Learning-Modellen für Layout-Erkennung, Lesereihenfolge und Tabellenstruktur und produziert das treueste Markdown aller Open-Source-Optionen — mehrspaltige wissenschaftliche Papers, komplexe Tabellen und sogar Formeln funktionieren.
Der Preis ist Infrastruktur: mehrere Gigabyte Modellgewichte, eine GPU für vernünftige Geschwindigkeit (CPU geht, ist aber langsam — oft Dutzende Sekunden pro Dokument) und ein schwerer Dependency-Baum, dessen Deployment in Produktions- oder Serverless-Umgebungen echten Aufwand bedeutet.
Marker ist die richtige Wahl, wenn Ausgabequalität bei schwierigen Dokumenten oberste Priorität hat und die Hardware da ist — ein wissenschaftliches Korpus auf einer GPU-Maschine massenzukonvertieren ist sein Sweet Spot. Für einen leichtgewichtigen Service oder eine Serverless-Funktion scheidet er wegen des operativen Gewichts meist aus.
Option 3: MarkItDown — Microsofts Alles-Konverter
MarkItDown ist Microsofts Open-Source-Bibliothek für alles-zu-Markdown: pip install markitdown, dann MarkItDown().convert("doc.pdf").text_content. Ihre Stärke ist die Breite — dieselbe API konvertiert PDF, DOCX, PPTX, XLSX, HTML und mehr, weshalb sie für LLM-Datenaufbereitung viral ging.
Speziell bei PDFs ist die Extraktion simpler als bei den dedizierten Optionen: Sie stützt sich auf einfache Textextraktion, sodass Überschriften-Erkennung und Tabellentreue hinter PyMuPDF4LLM und Marker zurückbleiben — und gescannte PDFs brauchen ein zusätzliches OCR-Setup.
MarkItDown ist die richtige Wahl, wenn eine einzige Dependency viele Dateitypen bei moderater Qualität abdecken soll — etwa ein internes Ingestion-Skript, das akzeptieren muss, "was auch immer die Leute hochladen" — und nicht die bestmögliche PDF-Ausgabe zählt.
Option 4: Eine gehostete API — ganz ohne Dependencies
Die vierte Option: die Konvertierung gar nicht lokal laufen lassen, sondern die PDF per POST an eine Parsing-API schicken und Markdown zurückbekommen. Mit ParseJet: resp = httpx.post("https://api.parsejet.com/v1/parse/auto/file", headers={"Authorization": "Bearer KEY"}, files={"file": open("doc.pdf", "rb")}) — das "text"-Feld der JSON-Antwort ist das Markdown.
Dieser Weg hat OCR für gescannte Seiten eingebaut, braucht keine Modellgewichte oder nativen Bibliotheken und funktioniert identisch in einer Serverless-Funktion, einem Container oder einem Notebook. Die AGPL-Frage umgeht er gleich mit. Der Trade-off: ein Netzwerk-Roundtrip und Kosten pro Dokument nach dem Free-Tier (300 Credits/Monat kostenlos; eine PDF kostet 3 Credits).
Die API ist die richtige Wahl, wenn die Pipeline heute laufen soll, wenn Scans unter den PDFs sind oder wenn das Deployment-Ziel schwere Dependencies bestraft — Lambda, Cloud Run, Vercel.
Welche Option ist die richtige?
Digital erzeugte PDFs, einfache bis mittlere Layouts, Geschwindigkeit zählt: PyMuPDF4LLM. Das beste Aufwand-zu-Qualität-Verhältnis in reinem Python.
Schwierige Dokumente (mehrspaltige Papers, komplexe Tabellen) und eine GPU vorhanden: Marker. Nichts Open-Source schlägt seine Ausgabequalität.
Viele verschiedene Dateitypen durch eine Bibliothek, moderate Qualität reicht: MarkItDown.
Gescannte PDFs im Mix, Serverless-Deployment oder null Lust auf Dependency-Management: die gehostete API. Ein HTTP-Aufruf, OCR inklusive, dasselbe Ausgabeschema für jedes Dokument.
Komplettes Beispiel: PDF-Ordner zu Markdown-Dateien
Egal welcher Weg — die Pipeline hat immer dieselbe Form: iterieren, konvertieren, schreiben. Hier mit der API (für die lokale Variante den inneren Aufruf durch pymupdf4llm.to_markdown() ersetzen):
import httpx; from pathlib import Path — dann für jede pdf in Path("pdfs/").glob("*.pdf"): resp = httpx.post("https://api.parsejet.com/v1/parse/auto/file", headers={"Authorization": "Bearer KEY"}, files={"file": pdf.read_bytes()}); Path("md/", pdf.stem + ".md").write_text(resp.json()["text"], encoding="utf-8").
Für die RAG-Ingestion das Markdown entlang der Überschriften chunken statt nach fixen Zeichenzahlen — überschriften-bewusste Chunks halten Abschnitte zusammen und retrieven dramatisch besser. Genau diese strukturelle Treue ist der Grund, warum sich der sorgfältige Konvertierungsschritt gelohnt hat.
Die Konvertierung ohne Code ausprobieren
PDF hochladen und die Markdown-Ausgabe dieser API direkt ansehen — Überschriften, Tabellen und OCR für gescannte Seiten inklusive.
PDF kostenlos zu Markdown konvertierenHäufig gestellte Fragen
Was ist die beste Python-Bibliothek, um PDF zu Markdown zu konvertieren?
Für digital erzeugte PDFs bietet PyMuPDF4LLM das beste Verhältnis aus Geschwindigkeit und Qualität. Für schwierige Layouts mit verfügbarer GPU liefert Marker die höchste Qualität. Für gescannte PDFs oder Deployment ohne Dependencies erledigt eine gehostete API wie ParseJet OCR und Struktur in einem HTTP-Aufruf.
Wie konvertiere ich eine gescannte PDF in Python zu Markdown?
Gescannte Seiten enthalten keinen Text, also braucht es OCR. Lokal heißt das, selbst eine OCR-Engine anzubinden; der einfachere Weg ist eine API mit eingebautem OCR — ParseJet erkennt bildbasierte Seiten und verarbeitet sie automatisch per OCR in derselben Anfrage.
Ist MarkItDown gut für PDF zu Markdown?
Die Stärke von MarkItDown ist, viele Formate (PDF, DOCX, PPTX, XLSX) über eine Bibliothek zu konvertieren. Speziell bei PDFs ist die Strukturerkennung simpler als bei PyMuPDF4LLM oder Marker — für moderate Qualitätsansprüche in Ordnung, aber nicht die beste Wahl für treue Überschriften- und Tabellenextraktion.
Warum PDFs für RAG zu Markdown konvertieren statt zu Klartext?
Markdown bewahrt Überschriften, Listen und Tabellen, die Klartext plattmacht. Überschriften-bewusstes Chunking retrievt besser, und LLMs nutzen die Struktur, um Kontext zu verstehen — bei ungefähr denselben Token-Kosten wie Klartext.
Kann ich PDF in Python zu Markdown konvertieren, ohne etwas zu installieren?
Ja — eine Parsing-API per HTTP mit httpx oder requests aufrufen. Die Datei per POST an ParseJets /v1/parse/auto/file senden, und das "text"-Feld der Antwort ist das Markdown. Kostenlose API-Keys enthalten 300 Credits pro Monat.
Verwandte Tools
PDF to Markdown Converter
Convert PDF to Markdown online for free. Preserves headings, lists, tables, and code blocks. No signup required — try it instantly or automate via API.
PDF to JSON Converter
Convert PDF to JSON online for free. Get text, title, and metadata as structured JSON — ready for your app, database, or AI pipeline. API included.
Word to Markdown Converter
Convert Word documents (DOCX) to Markdown online for free. Headings, lists, and tables preserved. No signup — or automate DOCX to MD conversion via API.
Kostenlos mit Textextraktion starten
Keine Anmeldung erforderlich. Parsen Sie Ihre erste Datei in Sekunden.