Tabellen aus PDFs extrahieren: warum es so schwer ist
Tabellen aus PDFs zu extrahieren ist eine eigene Disziplin der Dokumenten-Analyse. Das liegt daran, dass PDF Tabellen nicht als Tabellen speichert, sondern als zufällig benachbarte Text-Items. Hier steht, warum das so ist, welche Tools (Camelot, Tabula, pdfplumber) den Job machen können und warum pdftxt.de bewusst keine strukturierte Tabellen-Extraktion macht.
Redakteur · PDF-Format-Historie & ISO-32000-Standards
Veröffentlicht am 07.06.2026 · Zuletzt geprüft am 07.06.2026
Warum PDF-Tabellen schwer sind
PDF speichert Tabellen nicht als Tabellen. Das ist der entscheidende Punkt, der die ganze Schwierigkeit erklärt. In einem DOCX gibt es ein <w:tbl>-Element, in HTML gibt es <table>, in Markdown gibt es Pipe-Syntax. In PDF gibt es ausschließlich Text-Items mit absoluten Positionen und ggf. Linien-Befehle.
Wer im InDesign-Workflow oder LaTeX eine Tabelle definiert hat, hat einer Software gesagt, da ist eine Tabelle mit 3 Spalten und 5 Zeilen. Die Software hat aus dieser Definition Layout-Befehle erzeugt: zeichne Text “Name” an Position (x=100, y=200), zeichne Text “Alter” an Position (x=300, y=200), zeichne Text “Beruf” an Position (x=500, y=200), etc. Im PDF stehen genau diese Layout-Befehle. Die ursprüngliche Tabellen-Struktur (welche Zelle gehört zu welcher Zeile, welche Zeile ist Header, welche Spalte ist “Alter”) ist nicht mehr im Dokument.
Das ist anders bei sauber getaggten PDF/UA-Dokumenten. Dort gibt es explizite Tags wie <Table><TR><TH>Name</TH></TR>, die einem Screen-Reader und einem Tabellen-Extraktor sagen, was zu welcher Zelle gehört. Das Problem: die meisten realen PDFs sind nicht PDF/UA-getaggt. Behörden-PDFs seit der EU-Pflicht 2018 oft schon, aber wissenschaftliche Papers, Geschäftsberichte, Präsentationsfolien meistens nicht.
Die Heuristik-Strategien
Tabellen-Extraktion ohne PDF/UA-Tags ist Heuristik. Es gibt zwei dominante Strategien:
Lattice-Mode (mit Linien)
Wenn die Tabelle Trennlinien hat (horizontale Linien zwischen Zeilen, vertikale zwischen Spalten), kann ein Extraktor die Linien finden und ihre Schnittpunkte als Tabellen-Zellen interpretieren. Camelot’s Lattice-Mode macht das:
- Konvertiere die PDF-Seite zu einem Bild (300 dpi).
- Wende Computer-Vision-Algorithmen an, um horizontale und vertikale Linien zu finden (Hough-Transform).
- Berechne die Schnittpunkte aller Linien, das sind die Tabellen-Knoten.
- Verteile die Text-Items aus dem PDF auf die Zellen, definiert durch je vier Knotenpunkte.
Lattice-Mode funktioniert sehr gut bei klassischen Tabellen mit Vollrahmen. Bei Tabellen mit nur Header-Linie oder ohne Linien ist Lattice nutzlos.
Stream-Mode (ohne Linien)
Wenn die Tabelle keine Linien hat, nur Whitespace zwischen Spalten, muss der Extraktor anders ran. Stream-Mode:
- Hole alle Text-Items aus dem PDF mit ihren Positionen.
- Cluster die Items nach y-Koordinate (Zeilen).
- Innerhalb jeder Zeile, cluster die Items nach x-Koordinate (Spalten).
- Stelle sicher, dass die Spalten-Anzahl über alle Zeilen konsistent ist.
Stream-Mode ist deutlich fehleranfälliger. Ein Text-Item mit anormaler y-Position wird falsch zugeordnet, eine Tabelle mit unterschiedlich vielen Spalten pro Zeile wird falsch interpretiert. Trotzdem ist Stream der einzige Weg für linienlose Tabellen.
Werkzeug-Landschaft
<rect class="box-pro" x="30" y="60" width="200" height="160"/>
<text class="label" x="130" y="84">Camelot (Python)</text>
<text class="small" x="130" y="106">Open Source</text>
<text class="small" x="130" y="122">Lattice + Stream Mode</text>
<text class="small" x="130" y="138">Empfohlen für Devs</text>
<text class="small" x="130" y="158">Goldstandard OSS</text>
<text class="small" x="130" y="174">pip install camelot-py</text>
<text class="small" x="130" y="194">Pandas DataFrame Output</text>
<text class="small" x="130" y="210">CSV/JSON Export</text>
<rect class="box" x="260" y="60" width="200" height="160"/>
<text class="label" x="360" y="84">Tabula (GUI)</text>
<text class="small" x="360" y="106">Open Source, Java</text>
<text class="small" x="360" y="122">Visülles Markieren</text>
<text class="small" x="360" y="138">Empfohlen für Nicht-Devs</text>
<text class="small" x="360" y="158">Browser-basiert</text>
<text class="small" x="360" y="174">Drag and Drop</text>
<text class="small" x="360" y="194">CSV Export</text>
<text class="small" x="360" y="210">Klassisch für Journalisten</text>
<rect class="box" x="490" y="60" width="200" height="160"/>
<text class="label" x="590" y="84">pdfplumber (Python)</text>
<text class="small" x="590" y="106">Open Source</text>
<text class="small" x="590" y="122">Low-Level API</text>
<text class="small" x="590" y="138">Volle Kontrolle</text>
<text class="small" x="590" y="158">Lattice durch Linien</text>
<text class="small" x="590" y="174">extract_tables()</text>
<text class="small" x="590" y="194">Custom Heuristiken</text>
<text class="small" x="590" y="210">Forschung + Custom</text>
In der Praxis:
- Camelot: pip install camelot-py[cv]. Python-Library, sehr aktiv gepflegt. Lattice und Stream als zwei Modi. Gibt einen Pandas-DataFrame zurück. Goldstandard für reproduzierbare Tabellen-Extraktion in Daten-Pipelines.
- Tabula: Eine GUI-Anwendung in Java mit Browser-Frontend. Beliebt bei Journalisten, weil man die Tabelle visüll markiert und das Tool dann extrahiert. Export als CSV.
- pdfplumber: Python-Library mit niedrigerem Abstraktions-Niveau. Du bekommst Zugriff auf alle PDF-Items (Text, Linien, Rechtecke) und kannst eigene Heuristiken implementieren. Gut für Forschungs-Use-Cases oder spezielle Tabellen-Formate.
- Adobe Acrobat Pro: Kommerziell, ca. 16 EUR pro Monat. Macht Tabellen-Extraktion sehr gut, weil Adobe die meisten Heuristiken implementiert hat und PDF/UA-Tags nutzen kann wenn vorhanden.
Für einfache Anwendungsfälle (Tabellen aus Zentralbank-Berichten, Statistik-PDFs) reicht Camelot oder Tabula. Für komplexere Use-Cases mit Multi-Page-Tabellen, verschachtelten Headern oder Sondersprachen ist Adobe Acrobat oft die richtige Wahl.
Warum pdftxt.de keine Tabellen-Erhaltung macht
pdftxt.de ist ein client-only Tool im Browser. Das hat zwei Implikationen für Tabellen:
Erstens technisch: Eine sinnvolle Tabellen-Extraktion brauchte entweder Computer-Vision-Algorithmen (Lattice mit Hough-Transform) oder anspruchsvolle Heuristiken (Stream mit x-Clustering). Beides ist im Browser machbar, aber nicht trivial. Es wäre ein eigenes Modul mit eigener Test-Suite, eigener Failure-Mode-Analyse, eigener UX. Im MVP ist das nicht enthalten, weil es nicht der primäre Use-Case ist.
Zweitens pragmatisch: Wer Tabellen wirklich strukturiert braucht, ist mit Camelot oder Tabula besser bedient. Diese Tools sind seit Jahren auf Tabellen optimiert, haben ihre Heuristiken durch tausende Use-Cases verfeinert, und sind in Python-Daten-Pipelines integriert. pdftxt.de würde mit einem schlechten Tabellen-Modul nur die schlechte Erfahrung dieser Tools schlechter machen.
In der pdftxt.de-V1 werden Tabellen als Lauftext extrahiert. Die Text-Items werden in der PDF-internen Reihenfolge ausgegeben, was bei Tabellen oft eine zeilen-weise Ausgabe ergibt: Header-Zelle 1, Header-Zelle 2, Header-Zelle 3, Datenzelle 1.1, Datenzelle 1.2, Datenzelle 1.3, etc. Das ist nicht strukturiert, aber lesbar.
Für Use-Cases, in denen die strukturierte Tabelle gebraucht wird:
- Camelot (Python) ist die erste Wahl
- Adobe Acrobat (kommerziell) ist die zweite Wahl
- Tabula (GUI) ist die GUI-Variante
Multi-Page-Tabellen und ihre Probleme
Eine Tabelle, die über mehrere Seiten geht, ist eine besondere Herausforderung. Im PDF stehen die Tabellen-Items pro Seite getrennt, der Tabellen-Extraktor muss erkennen, dass zwei aufeinanderfolgende Tabellen mit gleicher Spalten-Struktur zur gleichen logischen Tabelle gehören.
Camelot hat dafür den flavor='lattice'-Modus mit pages='all', der versucht, Tabellen über Seiten zu verbinden. Das funktioniert, wenn:
- die Spalten-Positionen über Seiten konsistent sind
- die Header-Zeile nicht auf jeder Seite wiederholt wird (oder eindeutig als Header markiert ist)
- die Tabelle ohne Unterbrechung durch andere Text-Blöcke läuft
In der Praxis sind alle drei Bedingungen oft nicht erfüllt. Geschäftsberichte mit Zwischen-Texten zwischen Tabellen-Teilen, Statistik-PDFs mit unterschiedlicher Header-Wiederholung, wissenschaftliche Tabellen mit Fussnoten. Multi-Page-Tabellen brauchen oft manuelle Nacharbeit.
Wann Plain-Text-Ausgabe genügt
Es gibt Use-Cases, in denen die strukturierte Tabelle überhaupt nicht gebraucht wird:
- KI-Verarbeitung: Ein LLM wie ChatGPT kann eine Tabelle in Lauftext oft gut interpretieren. Du fütterst es mit dem Plain-Text und fragst nach der zweiten Spalte. Funktioniert.
- Volltextsuche: Wer im PDF nach einem Wort sucht, will den Treffer im Kontext sehen. Die Tabellen-Struktur ist nur sekundär.
- Inhalts-Analyse: Wieviele Mal kommt das Wort “Risiko” im Quartalsbericht vor? Tabelle oder nicht, der Text-Count zählt.
- Manuelle Nachbearbeitung: Wer die Tabelle ohnehin in Excel übertragen wird, braucht den Text als Vorlage. Strukturierte Extraktion ist hier ein nice-to-have, nicht zwingend.
Für all diese Use-Cases ist pdftxt.de’s Plain-Text-Output ausreichend. Wer mehr braucht (strukturierter CSV-Export, Pandas-DataFrame, Excel-Tabelle), greift zu Camelot oder Tabula.
Was bleibt von der Tabellen-Frage
PDF-Tabellen sind ein eigenes Forschungsfeld. Sie sind schwer zu extrahieren, weil PDF Tabellen nicht als Tabellen speichert. Es gibt gute Open-Source-Tools (Camelot, Tabula, pdfplumber), die das Problem in den meisten Fällen lösen, aber nie perfekt und nie ohne manuelle Nacharbeit.
pdftxt.de macht bewusst keine strukturierte Tabellen-Extraktion. Im V1 ist das nicht enthalten, weil es kein Plain-Vanilla-Feature ist, sondern ein komplexes Modul mit eigener Test-Suite und eigener UX. Wer Tabellen wirklich strukturiert braucht, ist mit Camelot besser bedient. Wer nur den Tabellen-Inhalt als Lauftext braucht (KI-Verarbeitung, Volltextsuche, manuelle Nacharbeit), bekommt das von pdftxt.de.
Was bleibt: das richtige Werkzeug für den richtigen Job. pdftxt.de ist das Werkzeug für Text-Extraktion, Camelot ist das Werkzeug für Tabellen-Extraktion. Beide haben ihre Domäne, und sie überlappen nicht zufällig.
FAQ
Häufige Fragen
Warum kann pdftxt.de keine Tabellen erhalten?
Weil pdftxt.de ein einfaches Extraktions-Tool ist, das die PDF.js-API direkt nutzt. PDF.js liefert pro Seite eine Liste von Text-Items mit Positionen, aber keine Tabellen-Struktur. Tabellen aus diesen Items rekonstruieren erfordert Heuristiken (Zeilen-Erkennung anhand y-Koordinaten, Spalten-Erkennung anhand x-Clustering, Header-Erkennung), die ein eigenes Modul rechtfertigen. Im V1 macht pdftxt.de reine Text-Extraktion, in der die Tabelle als Lauftext erscheint. Strukturierte Tabellen-Extraktion ist V2-Wunschliste.
Welches Tool erhält PDF-Tabellen gut?
Camelot (Python, https://camelot-py.readthedocs.io/) ist der Goldstandard für Tabellen-Extraktion. Es gibt zwei Strategien: lattice (für Tabellen mit Linien) und stream (für Tabellen ohne Linien, nur mit Whitespace-Trennung). Camelot ist nicht perfekt, aber besser als alle anderen kostenlosen Tools. Tabula (https://tabula.technology/) ist eine GUI-Variante derselben Idee. pdfplumber (Python) ist eine weitere Option, gut für Programmierer.
Was sind die Heuristiken bei Tabellen-Extraktion?
Mehrere. Lattice-Mode: Suche nach horizontalen und vertikalen Linien im PDF, deren Schnittpunkte sind Tabellen-Zellen. Stream-Mode: Suche nach Whitespace-Spalten in den Text-Items, dann Cluster die Items in Zellen. Header-Detection: erste Zeile hat oft Bold-Schrift oder Hintergrund-Farbe. Multi-Page-Tables: zwei Tabellen mit gleicher Spalten-Struktur auf aufeinanderfolgenden Seiten werden zusammengeführt. Alle Heuristiken haben False-Positive- und False-Negative-Raten.
Warum sind Tabellen in PDFs anders als in DOCX oder HTML?
Weil DOCX und HTML Tabellen explizit als Tabellen-Strukturen speichern. In DOCX gibt es ein `<w:tbl>`-Element mit Zeilen, Zellen, Spalten-Definitionen. In HTML gibt es `<table><tr><td>`. Beide sind eindeutig parsbar. In PDF gibt es nichts dergleichen, die Tabelle existiert nur visüll. Wer im InDesign-Workflow eine Tabelle gebaut hat, hat in der PDF nur noch Text-Items und ggf. Linien an Tabellen-Rändern. Die Tabellen-Struktur muss rückgewonnen werden.
Was sind PDF/UA-Tags und helfen die bei Tabellen?
PDF/UA ist der Accessibility-Standard für PDFs (ISO 14289). Er definiert Tag-Strukturen, die einem Screen-Reader die logische Hierarchie zugänglich machen, inklusive Tabellen-Tags (`<Table>`, `<TR>`, `<TD>`). Wenn ein PDF korrekt PDF/UA-getaggt ist, kann man Tabellen aus den Tags eindeutig rekonstruieren. Das Problem: die meisten PDFs sind nicht PDF/UA-getaggt, weil das aufwendige Nachbearbeitung erfordert. Behörden-PDFs ab 2018 sind oft getaggt (EU-Pflicht), aber die meisten anderen PDFs nicht.
Quellen
Weitere Ratgeber