Text aus PDF-Seiten extrahieren und geordnet verbinden
Zwei Seitentexte, ein Quartalsbericht und sein Anhang, werden zu einem Dokument mit der Marke --- PAGE BREAK --- dazwischen, in Ihrer Reihenfolge und ohne Umschreiben. Praktisch nach einem Textleser oder einer Texterkennung. Kostenlos in Ihrem Browser.
- Kostenlos
- Läuft in Ihrem Browser
- Ohne Anmeldung
- Ihre Daten bleiben auf Ihrem Gerät
Im Browser ausführen – kostenlos
Führen Sie getrennte Textblöcke einzelner PDF-Seiten zu einer verlässlichen Zeichenfolge zusammen, ohne Seitengrenzen zu verlieren. Übergeben Sie den bereits extrahierten Text jeder Seite in der richtigen Reihenfolge; die Funktion setzt dazwischen eine klare Marke. Sie führt keine OCR durch und lädt oder analysiert keine PDF-Datei. Stattdessen erledigt sie den letzten Montageschritt für Abläufe, die bereits einen Textblock je Seite liefern und eine stabile, durchsuchbare oder exportierbare Ausgabe benötigen.
Bereiten Sie geordnete Seitenblöcke vor
Übergeben Sie ein pages-Array mit mindestens einem Objekt und tragen Sie den extrahierten Text jeder PDF-Seite in dessen Feld text ein. Die Array-Position bestimmt die Reihenfolge: Der erste Datensatz steht für Seite eins, der zweite für Seite zwei und so weiter. Die Funktion sortiert nicht, leitet keine Seitenzahlen ab und untersucht keine PDF-Datei, weil dies eine zuvor festgelegte Reihenfolge unbemerkt verändern könnte.
Jeder text-Wert darf Überschriften, Absätze, Leerzeilen, Unicode-Zeichen oder eine leere Zeichenfolge enthalten, wenn eine echte Seite keinen extrahierbaren Text besitzt. Eine leere Seite ist zulässig und ihre Position bleibt durch die benachbarten Marken sichtbar. Jeder Eintrag muss dennoch ein Objekt mit einem text-Wert vom Typ String sein; fehlende Werte, Zahlen, verschachtelte Arrays und andere Formen werden abgelehnt.
Der strenge Vertrag verhindert unbeabsichtigte Umwandlungen.
Verstehen Sie das verbundene Ergebnis
Zwischen jedem benachbarten Paar setzt der Algorithmus zwei Zeilenumbrüche, die Marke --- PAGE BREAK --- und zwei weitere Umbrüche. Abgesehen vom Einfügen der Trenner kürzt, normalisiert, ordnet, interpretiert oder verändert der Algorithmus den Inhalt nicht. Führende Leerzeichen, abschließende Umbrüche, wiederholte Leerzeilen, Satzzeichen und nichtlateinische Schriften bleiben erhalten.
Das ist beabsichtigt: Eine Montage soll extrahierte Belege bewahren. Wenn Sie später bereinigten Fließtext benötigen, verwenden Sie eine getrennte, ausdrücklich definierte Normalisierung. Zum erneuten Aufteilen nutzen Sie die zurückgegebene Marke einschließlich ihrer Zeilenumbrüche.
Binden Sie die Funktion in einen PDF-Ablauf ein
Setzen Sie diese Funktion ein, nachdem ein Textschicht-Leser, OCR-System, Dokumentparser oder Upload-Ablauf einen Block je Seite erzeugt hat. Sie hilft, wenn das nächste System eine einzige Zeichenfolge erwartet, Prüfer, Suchwerkzeuge oder Zitatlogik aber weiterhin sichtbare Grenzen benötigen. Eine Suchindex-Pipeline kann Seiten vor der Indizierung verbinden und Kontextwechsel markieren.
Ein Archiv kann eine stabile Textdarstellung neben dem Originaldokument speichern. Eine Sprachverarbeitung kann den gesamten Text übernehmen, ohne Arrays durchlaufen zu müssen. Dieselbe Eingabe ergibt stets dieselbe Ausgabe.
Die Qualität hängt vollständig von der vorherigen Extraktion ab; vertauschte Spalten, fehlende Zeichen oder reine Bildseiten müssen dort korrigiert werden.
Anwendungsfälle
Text für Suchindizes vorbereiten
Verbinden Sie Seitenergebnisse zu einer indexierbaren Zeichenfolge und behalten Sie eindeutige Grenzen zur Prüfung.
OCR-Seitenausgaben montieren
Fügen Sie separat erkannte Seiten zusammen, damit Zusammenfassung oder Klassifizierung ein geordnetes Dokument erhält.
Archivtext neben dem PDF anlegen
Speichern Sie eine deterministische Textdarstellung beim PDF und machen Sie Seitenwechsel dauerhaft sichtbar.
Häufige Fragen
Liest diese Funktion eine PDF-Datei?
Nein. Sie übernimmt bereits extrahierte Blöcke einzelner Seiten und verbindet sie ausschließlich in ihrer Reihenfolge.
Darf eine Seite eine leere Zeichenfolge enthalten?
Ja. Sie steht für eine Seite ohne extrahierten Text und behält ihre ursprüngliche Position zwischen den Grenzen.
Was trennt im Ergebnis eine Seite von der nächsten?
Zwei Zeilenumbrüche, die Marke --- PAGE BREAK --- und zwei weitere Zeilenumbrüche. Vor der ersten und nach der letzten Seite wird nichts ergänzt, der Text beginnt und endet also genau so, wie Sie ihn übergeben haben.
Werden Leerzeichen oder Zeilenumbrüche in meinem Text bereinigt?
Nein. Führende Leerzeichen, abschließende Umbrüche, wiederholte Leerzeilen, Satzzeichen und nicht lateinische Schriften bleiben erhalten. Wenn Sie glatten Fließtext brauchen, wenden Sie danach eine eigene, ausdrückliche Bereinigung an.
Kann ich den zusammengefügten Text wieder in Seiten teilen?
Ja: Trennen Sie an der Marke samt den umgebenden Zeilenumbrüchen. Bedenken Sie aber, dass derselbe wörtliche Text bereits innerhalb einer Seite vorkommen könnte, und prüfen Sie das vorher.
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-text \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pages":[{"text":"Quarterly report\nRevenue increased by 12%."},{"text":"Appendix\nFigures are unaudited."}]}'const res = await fetch("https://api.kit.forhosting.com/pdf/extract-text", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pages": [
{
"text": "Quarterly report\nRevenue increased by 12%."
},
{
"text": "Appendix\nFigures are unaudited."
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/extract-text",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pages": [
{
"text": "Quarterly report\nRevenue increased by 12%."
},
{
"text": "Appendix\nFigures are unaudited."
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/extract-text", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pages":[{"text":"Quarterly report\\nRevenue increased by 12%."},{"text":"Appendix\\nFigures are unaudited."}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pages":[{"text":"Quarterly report\nRevenue increased by 12%."},{"text":"Appendix\nFigures are unaudited."}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/extract-text", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"pages": [
{
"text": "Quarterly report\nRevenue increased by 12%."
},
{
"text": "Appendix\nFigures are unaudited."
}
]
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.extract_text",
"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 | 25 |
max_pages | 200 |
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
Bereiten Sie geordnete Seitenblöcke vor
Pro Anfrage sind höchstens 10000 Seitenblöcke zulässig.
Verstehen Sie das verbundene Ergebnis
Die Antwort enthält text, pages und page_break_marker. Das Feld text übernimmt die ursprünglichen Zeichenfolgen exakt in der übergebenen Reihenfolge. Vor der ersten und nach der letzten Seite wird keine Marke ergänzt. pages nennt die Anzahl der verbundenen Blöcke, während page_break_marker den Trenner für nachgelagerten Code offenlegt.
Binden Sie die Funktion in einen PDF-Ablauf ein
Die Verarbeitung ist deterministisch und auf das gelieferte JSON beschränkt: Netzwerk, Zufall, aktuelle Zeit, OCR und PDF-Dekodierung werden nicht verwendet. Automatisierte Anfragen kosten $0.002.
Technische Fragen
Welche Marke trennt die Seiten?
Sie setzt --- PAGE BREAK --- mit jeweils zwei Zeilenumbrüchen auf beiden Seiten und liefert sie in page_break_marker zurück.
Was geschieht, wenn ich keine Seiten sende?
Die Anfrage schlägt mit invalid_input fehl, da mindestens ein Seitenblock erforderlich ist.
Was kostet eine Anfrage?
Automatisierte Anfragen nutzen den veröffentlichten Grundpreis von $0.002; ein Seitenaufschlag fällt nicht an.