Tabellen aus PDF-Text extrahieren
Eine Seite, deren Werte per Tabulator ausgerichtet sind, etwa Cable, 25 und 1,20, wird zu einer Tabelle mit drei benannten Spalten und drei Datenzeilen. Fließtext ohne ausgerichtete Spalten wird abgelehnt statt in eine Scheintabelle gepresst. Kostenlos in Ihrem Browser.
- Kostenlos
- Läuft in Ihrem Browser
- Ohne Anmeldung
- Ihre Daten bleiben auf Ihrem Gerät
Im Browser ausführen – kostenlos
Es ist der deterministische Schritt zwischen dem Extrahieren von Text aus einem PDF und der tatsächlichen Nutzung der darin enthaltenen Zahlen, ganz ohne OCR und ohne KI-Mutmaßungen.
Vom rohen PDF-Text zur strukturierten Tabelle
Wenn ein Textextraktor eine PDF-Seite verarbeitet, kommen Tabellen als flache Textzeilen zurück. Ein Mensch erkennt die Spalten noch, weil die Werte ausgerichtet sind — getrennt durch Tabulatoren oder durch Lücken von zwei oder mehr Leerzeichen —, ein Programm nicht. Diese Fähigkeit schließt diese Lücke.
Sie senden die rohen Zeilen der Seite und das System findet die ausgerichteten Spalten: Jede Zeile wird am erkannten Trennzeichen aufgeteilt, die Spaltenanzahl, die sich über die Zeilen wiederholt, wird als Form der Tabelle übernommen, und jede Zeile wird in Zellen zerlegt. Die erste Zeile wird standardmäßig zur Kopfzeile, sodass die Ausgabe ein benanntes columns-Array plus ein rows-Array mit den Daten ist, bereit zur Umwandlung in Objekte oder zum Laden in einen Dataframe.
Alles ist deterministisch — derselbe Text ergibt immer dieselbe Tabelle —, was sie für eine automatisierte Pipeline sicher macht, in der ein OCR oder ein Vision-Modell stille Abweichungen einführen würde.
Wie die Analyse tatsächlich funktioniert
Zuerst werden Leerzeilen verworfen und jede verbleibende Zeile in Zellen aufgeteilt. Im Modus auto nutzt der Parser Tabulatoren, sobald eine Zeile einen enthält, und sonst Folgen von zwei oder mehr Leerzeichen — Sie können jede der beiden Strategien auch mit dem Parameter delimiter erzwingen. Nur Zeilen, die mindestens zwei Zellen ergeben, sind Kandidaten für die Tabelle.
Unter diesen sucht der Parser nach der Spaltenanzahl, die sich wiederholt: dem Modus der Verteilung. Eine echte Tabelle ist eine Menge von Zeilen, die sich über ihre Spaltenzahl einig sind; Zeilen mit abweichender Anzahl — ein umbrochener Absatz, eine verirrte Fußzeile — werden beiseitegelegt. Wiederholt sich keine Anzahl mindestens zweimal oder gibt es weniger als zwei Kandidatenzeilen, wird die Eingabe abgelehnt: Es gibt keine Tabelle zu finden.
Deaktivieren Sie die Option für kopflose Daten, und die synthetischen Namen gelten für alle Zeilen.
Wo sie einpasst und was sie nicht ist
Setzen Sie sie als zweite Stufe einer PDF-Datenpipeline ein: Extrahieren Sie die Textebene mit einem Extraktor, rufen Sie diesen Endpunkt für jede Seite mit einer Tabelle auf und laden Sie die resultierenden Zeilen dorthin, wo sie hingehören. Seien Sie sich klar, was sie nicht ist. Sie liest nicht die PDF-Datei selbst — sie arbeitet mit Text, den Sie bereits extrahiert haben.
Sie verarbeitet keine gescannten Seiten, denn die haben keine Textebene; für Bilder von Tabellen brauchen Sie eine OCR-basierte Fähigkeit. Und sie erwartet ausgerichtete Spalten, keine Prosa: Fließtext wird abgelehnt, statt zu einer falschen Tabelle verformt zu werden.
Anwendungsfälle
Eine Berichtsaufnahme-Pipeline automatisieren
Führen Sie den Parser nach Ihrem Textextraktor auf jeder Seite aus und laden Sie nur die Seiten mit Tabellen — der Rest wird sauber abgelehnt und nicht berechnet.
Häufige Fragen
Liest sie die PDF-Datei direkt?
Nein. Sie analysiert die rohe Textebene einer Seite, die Sie bereitstellen. Extrahieren Sie den Text zuerst mit einem PDF-Textextraktor und senden Sie die Zeilen dann hierher.
Welche Spaltentrennzeichen werden unterstützt?
Tabulatoren oder Folgen von zwei oder mehr Leerzeichen. Der Auto-Modus erkennt, welches die Seite verwendet; Sie können mit dem Parameter delimiter auch Tabulator oder Leerzeichen erzwingen.
Was passiert, wenn der Text keine Tabelle enthält?
Ungültige Aufrufe werden vor der Abrechnung abgelehnt und kosten daher nichts.
Funktioniert sie mit gescannten PDFs?
Nein. Ein Scan ist ein Bild und hat keine analysierbare Textebene. Verwenden Sie für gescannte Dokumente einen OCR-Tabellenextraktor; diese Fähigkeit ist für digitale PDFs mit markierbarem Text gedacht.
Wird mein Dokument gespeichert?
Nein. Der Text wird im Arbeitsspeicher verarbeitet und verworfen; zurückgegeben wird nur die analysierte Tabelle.
Verwandte Tools
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/pdf/extract-tables \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Item\tQty\tUnit price\nWidget\t12\t9.99\nGadget\t3\t24.50"}'const res = await fetch("https://api.kit.forhosting.com/pdf/extract-tables", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Item\tQty\tUnit price\nWidget\t12\t9.99\nGadget\t3\t24.50"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/extract-tables",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Item\tQty\tUnit price\nWidget\t12\t9.99\nGadget\t3\t24.50"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/extract-tables", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Item\\tQty\\tUnit price\\nWidget\\t12\\t9.99\\nGadget\\t3\\t24.50"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Item\tQty\tUnit price\nWidget\t12\t9.99\nGadget\t3\t24.50"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/extract-tables", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"text": "Item\tQty\tUnit price\nWidget\t12\t9.99\nGadget\t3\t24.50"
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.extract_tables",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Limits
max_mb | 1 |
max_lines | 5000 |
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |
Technische Hinweise
Die API zum Extrahieren von Tabellen aus PDF-Text nimmt die rohe Textebene einer PDF-Seite — die Zeilen, die ein Textextraktor liefert, bei denen Spalten mit Tabulatoren oder Leerzeichenfolgen ausgerichtet sind — und wandelt sie in eine saubere, strukturierte Tabelle um: Spaltennamen, Datenzeilen und Zählwerte, als JSON, bereit für eine Tabellenkalkulation, einen Datenbankimport oder ein Skript.
Vom rohen PDF-Text zur strukturierten Tabelle
Enthält die Seite keine ausgerichteten Spalten, schlägt der Aufruf mit einem klaren invalid_input-Fehler fehl, statt eine Tabelle zu erfinden, und fehlgeschlagene Aufrufe werden nicht berechnet.
Wie die Analyse tatsächlich funktioniert
Ist has_header aktiviert, benennt die erste Tabellenzeile die Spalten; leere oder doppelte Kopfzellen werden durch col_1, col_2 usw. ersetzt, sodass jeder Spaltenname der Ausgabe verwendbar ist.
Wo sie einpasst und was sie nicht ist
Da die Analyse reine Textverarbeitung ist, läuft sie am Edge in Millisekunden, kostet $0.002 pro Aufruf, und derselbe Code läuft kostenlos in Ihrem Browser auf dieser Seite — Sie können den Text einer Seite also per Einfügen testen, bevor Sie irgendetwas automatisieren. Sie eignet sich ebenso für einmalige Aufgaben: Fügen Sie den Text einer Berichtsseite ein, erhalten Sie JSON und wandeln es in einem weiteren Schritt in CSV um.
Integrationsbeispiele
Eine Preisliste aus einer PDF-Seite zurückgewinnen
Extrahieren Sie den Seitentext, senden Sie ihn ein und erhalten Sie die Spalten Artikel, Menge und Preis als JSON-Zeilen, bereit für den Import in eine Tabellenkalkulation.
Einen Datenabzug ohne Kopfzeile umwandeln
Schalten Sie die Kopfzeilenerkennung mit has_header=false ab und erhalten Sie stabile Namen col_1..col_n für jede Zeile einer leerzeichenausgerichteten Auflistung.
Technische Fragen
Was kostet das?
$0.002 pro Aufruf. Derselbe Parser läuft auf dieser Seite auch kostenlos in Ihrem Browser — Sie zahlen nur, wenn Sie ihn über die API automatisieren.