PDF-Lesezeichen mit Seiten und Ebenen auflisten
Wandeln Sie die Gliederungsstruktur einer PDF-Datei in eine übersichtliche, geordnete Lesezeichenliste um, die sich leicht prüfen, testen, exportieren oder weiterverarbeiten lässt.
Im Browser ausführen – kostenlos
Läuft direkt in Ihrem Browser – kostenlos. Ihre Datei verlässt Ihren Browser nicht und wird an keinen Server übertragen.
Jeder Eintrag enthält den Titel, die ab eins gezählte Hierarchieebene und die ebenfalls ab eins gezählte Zielseite. Die Verarbeitung bewahrt die ursprüngliche Reihenfolge und setzt jedes untergeordnete Element direkt hinter sein übergeordnetes Element. Eine leere Gliederung wird ausdrücklich abgelehnt, damit ein fehlendes Inhaltsverzeichnis nicht mit einem erfolgreichen Ergebnis ohne Daten verwechselt werden kann.
Verschachtelte Gliederungen in nutzbare Zeilen umwandeln
PDF-Lesezeichen werden üblicherweise als Gliederungsbaum dargestellt. Kapitel liegen auf der obersten Ebene, Abschnitte darunter, und weitere Überschriften können zusätzliche Ebenen bilden. In einem Anzeigeprogramm ist diese Struktur praktisch, für eine Navigationsprüfung, einen Bericht, den Vergleich zweier Ausgaben oder die Übergabe an eine Tabelle jedoch unhandlich. Diese Fähigkeit durchläuft den Baum in Präorder: Zuerst erscheint das übergeordnete Element, danach folgen seine Nachfahren in der ursprünglichen Reihenfolge, bevor das nächste gleichrangige Element verarbeitet wird. Jede Zeile enthält Titel, Ebene und Zielseite. Ebenen und Seiten beginnen bei eins. So bleibt die sichtbare Lesereihenfolge erhalten, während die rekursive Verschachtelung entfällt. Die Fähigkeit öffnet oder verändert keine PDF-Datei. Sie erwartet eine Gliederung, die bereits durch einen PDF-Parser oder einen vorherigen Verarbeitungsschritt gewonnen wurde.
Validierung und feste Reihenfolge nachvollziehen
Jedes Lesezeichen muss ein Objekt mit einem nicht leeren Titel und einer positiven ganzen Seitenzahl sein. Optionale Unterpunkte müssen als Array weiterer Lesezeichen vorliegen. Leerraum an den Titelrändern wird entfernt, der eigentliche Text bleibt unverändert. Der Algorithmus sortiert weder alphabetisch noch nach Seitenzahl, denn das könnte die beabsichtigte Reihenfolge des Autors zerstören. Stattdessen folgt er der gelieferten Sequenz und bestimmt die Ebene aus der Tiefe. Dieselbe Eingabe erzeugt daher immer dieselbe Ausgabe, ohne Netzwerkzugriff, Zeitstempel, zufällige Kennungen oder umgebungsabhängige Effekte. Eine leere oberste Gliederung führt zu einem Fehler wegen ungültiger Eingabe. Ihre Automatisierung kann dadurch bei fehlenden Lesezeichen anhalten, anstatt einen scheinbar gültigen leeren Index zu veröffentlichen. Fehlerhafte Unterpunkte, fehlende Titel, ungültige Seiten, übermäßige Tiefe, Zyklen und übergroße Bäume werden ebenfalls zurückgewiesen.
Die Liste in Dokumentabläufe einbinden
Eine flache Lesezeichenliste bildet eine klare Schnittstelle zwischen PDF-Analyse und nachgelagerter Geschäftslogik. Sie können daraus ein Inhaltsverzeichnis anzeigen, erwartete Kapitel prüfen, Titel und Sprungziele verschiedener Fassungen vergleichen oder Seiten für eine spätere Extraktion Abschnitten zuordnen. Die Antwort enthält sowohl die Gesamtzahl als auch die geordneten Datensätze. Ein einfaches System kann somit zunächst den Umfang prüfen und danach einzelne Einträge verarbeiten. Mit der Ebene lassen sich Einrückungen oder sogar der Baum rekonstruieren; die Seite unterstützt Navigation und Bereichsberechnungen. Die Fähigkeit gibt nur die erhaltene Gliederung wieder: Sie bestätigt nicht, ob Ziele in einer bestimmten PDF-Datei existieren, leitet keine Überschriften aus Text ab und repariert keine defekten Sprünge. Prüfen Sie Seitengrenzen separat, wenn der Quellparser die Seitenzahl liefert. Die Browserausführung ist kostenlos; automatisierte API-Anfragen kosten jeweils $0.002. Beide Wege nutzen dieselbe deterministische Logik.
Anwendungsfälle
Dokumentnavigation prüfen
Kontrollieren Sie alle Lesezeichen in sichtbarer Reihenfolge und erkennen Sie fehlende Kapitel, unerwartete Ebenen oder falsche Ziele vor der Veröffentlichung.
Ein Inhaltsverzeichnis erstellen
Wandeln Sie Parserdaten in Zeilen um, die sich nach Ebene einrücken und mit Zielseiten verknüpfen lassen.
PDF-Ausgaben vergleichen
Erstellen Sie stabile Inventare zweier Fassungen und vergleichen Sie Titel, Hierarchie, Reihenfolge und Zielseiten.
Häufige Fragen
Liest diese Fähigkeit die PDF-Datei selbst?
Nein. Sie übernimmt eine von einem PDF-Parser erzeugte Gliederung und wandelt den Baum in Lesezeichendatensätze um.
Welche Reihenfolge verwendet das Ergebnis?
Es gilt die Präorder: Jedes übergeordnete Element steht vor seinen Kindern, gleichrangige Elemente behalten die gelieferte Dokumentreihenfolge.
Wie werden die Ebenen nummeriert?
Oberste Lesezeichen haben Ebene 1, deren Kinder Ebene 2; jede weitere Verschachtelung erhöht den Wert um eins.
Was geschieht bei einer leeren Gliederung?
Die Anfrage endet mit einem Fehler wegen ungültiger Eingabe, damit fehlende Lesezeichen nicht als gültiger leerer Bericht erscheinen.
Wird geprüft, ob Zielseiten vorhanden sind?
Ziele müssen positive ganze Zahlen sein; der Abgleich mit der tatsächlichen Seitenzahl muss jedoch separat erfolgen.
Was kostet eine API-Anfrage?
Eine API-Anfrage kostet $0.002. Dieselbe deterministische Logik können Sie im Browser kostenlos ausführen.
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/bookmarks-list \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"outline":[{"title":"Introduction","page":1,"children":[{"title":"Background","page":3}]},{"title":"Methods","page":8}]}'const res = await fetch("https://api.kit.forhosting.com/pdf/bookmarks-list", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"outline": [
{
"title": "Introduction",
"page": 1,
"children": [
{
"title": "Background",
"page": 3
}
]
},
{
"title": "Methods",
"page": 8
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/bookmarks-list",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"outline": [
{
"title": "Introduction",
"page": 1,
"children": [
{
"title": "Background",
"page": 3
}
]
},
{
"title": "Methods",
"page": 8
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/bookmarks-list", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"outline":[{"title":"Introduction","page":1,"children":[{"title":"Background","page":3}]},{"title":"Methods","page":8}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"outline":[{"title":"Introduction","page":1,"children":[{"title":"Background","page":3}]},{"title":"Methods","page":8}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/bookmarks-list", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"outline": [
{
"title": "Introduction",
"page": 1,
"children": [
{
"title": "Background",
"page": 3
}
]
},
{
"title": "Methods",
"page": 8
}
]
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.bookmarks_list",
"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. |