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.

7 Min. Lesezeit 1.323 Wörter
Jan-Tristan Rudat

Von Jan-Tristan Rudat

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:

  1. Konvertiere die PDF-Seite zu einem Bild (300 dpi).
  2. Wende Computer-Vision-Algorithmen an, um horizontale und vertikale Linien zu finden (Hough-Transform).
  3. Berechne die Schnittpunkte aller Linien, das sind die Tabellen-Knoten.
  4. 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:

  1. Hole alle Text-Items aus dem PDF mit ihren Positionen.
  2. Cluster die Items nach y-Koordinate (Zeilen).
  3. Innerhalb jeder Zeile, cluster die Items nach x-Koordinate (Spalten).
  4. 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

PDF-Tabellen-Extraktions-Werkzeuge
<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>
Drei dominante Open-Source-Tools für PDF-Tabellen-Extraktion. Camelot für Programmierer (beste Out-of-the-Box-Qualität), Tabula für GUI-Nutzer (klassisch in Daten-Journalismus), pdfplumber für Custom-Pipelines.

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.

Anzeige

Quellen

Weitere Ratgeber

Weiterlesen

Alle Ratgeber

Anzeige
Anzeige
Anzeige
Anzeige