ForHosting KIT · Dokumente & PDF

Links aus PDF extrahieren

Aus sieben Anmerkungen eines PDFs werden die vier echten Weblinks, jeweils mit Seitenzahl; Kommentare, Markierungen und interne Seitensprünge bleiben außen vor. Ein Link, der auf drei Seiten steht, erscheint dreimal. Kostenlos in Ihrem Browser.

  • Kostenlos
  • Läuft in Ihrem Browser
  • Ohne Anmeldung
  • Ihre Daten bleiben auf Ihrem Gerät
Nutzen Sie es über WebAPIE-MailTelegramApp bald

Läuft direkt in Ihrem Browser – kostenlos. Ihre Datei verlässt Ihren Browser nicht und wird an keinen Server übertragen.

Der PDF-Link-Extraktor liest die seitenweise Annotationsliste eines PDFs — genau das, was eine Reader-Bibliothek wie pdf.js aus getAnnotations zurückgibt — und liefert jeden gefundenen Hyperlink mit seiner Seitenzahl und Ziel-URL. Es ist der fehlende Schritt zwischen „Ich habe die Annotationen“ und „Ich weiß, wohin dieses Dokument verweist“: ein deterministischer Durchlauf, ohne Rendering, ohne OCR und ohne Raten. Rein interne Links und Annotationen, die keine Links sind, werden herausgefiltert, sodass Sie eine saubere, geordnete Liste der externen Verweise des Dokuments erhalten — bereit für ein Audit, eine Seed-Liste für einen Crawler oder eine Compliance-Prüfung.

Warum Annotationen und nicht Rohtext

Links durch Durchsuchen des extrahierten Textes zu finden, ist unzuverlässig: Eine im Text sichtbare URL ist möglicherweise nicht anklickbar, und ein anklickbarer Link kann einen Ankertext zeigen, der seinem Ziel in nichts gleicht. Die maßgebliche Quelle, um Links aus PDF zu extrahieren, ist die Annotationsebene. PDF-Reader speichern interaktive Elemente als Annotationen, die an eine Seite gebunden sind, und Hyperlinks leben dort als Einträge vom Subtyp Link mit einer URI.

Diese Fähigkeit nimmt diese Liste als Eingabe entgegen — ein Datensatz pro Annotation mit Seitenzahl, Subtyp und optionaler URI — und filtert sie bis zu den tatsächlichen ausgehenden Hyperlinks. Da die Seitenzahl mit jeder Annotation mitwandert, sagt Ihnen jedes Ergebnis genau, an welcher Stelle des Dokuments der Link steht — genau das macht die Ausgabe für Prüfungen und Audits nutzbar statt nur eine nackte Liste von URLs.

Was der Extraktor behält und was er verwirft

Der Filter ist bewusst streng. Nur Annotationen mit dem Subtyp Link werden berücksichtigt; Kommentare, Hervorhebungen, Formular-Widgets und jede andere Art von Annotation werden übersprungen. Unter den Link-Annotationen überleben nur die mit einer nicht leeren URI — eine Link-Annotation ohne URI ist typischerweise ein interner Sprung zu einer anderen Seite, also Navigation innerhalb des Dokuments und kein Hyperlink zu einem externen Ziel, und wird daher ausgelassen.

URIs werden von umschließenden Leerzeichen befreit, aber ansonsten wörtlich zurückgegeben: ohne Umschreiben, ohne Auflösung, ohne Deduplizierung. Erscheint dieselbe URL auf drei Seiten, erhalten Sie drei Einträge, denn die Tatsache, dass sie dreimal erscheint, ist eine Information. Die Ausgabe ist exakt so geordnet, wie die Annotationen ankommen, was in der Praxis der Dokumentreihenfolge entspricht.

Dieselbe URL kann in einem langen Dokument legitim mehrfach vorkommen — in der wiederkehrenden Fußzeile, in einem Literaturverzeichnis und auf einer Kontaktseite — und das Zusammenfassen dieser Vorkommen würde den Unterschied zwischen einer einzelnen Zitation und einer systematischen Referenz verwischen; der Extraktor behält daher alle und überlässt es dem Aufrufer, was nachgelagert aggregiert wird.

Wo sie in einer Pipeline passt

Der typische Ablauf ist: Öffnen Sie das PDF mit einer Reader-Bibliothek, sammeln Sie die Annotationen Seite für Seite, flachen Sie sie zu der Datensatzliste ab, die diese Fähigkeit erwartet, und senden Sie sie. Zurück erhalten Sie eine Anzahl und ein Array von Paaren {page, url}. Teams nutzen sie, um die ausgehenden Verweise von Verträgen und Berichten vor der Veröffentlichung zu inventarisieren, die Seed-Liste für einen Link-Check aufzubauen oder zu bestätigen, dass ein anonymisiertes Dokument nicht mehr dorthin verweist, wohin es nicht verweisen sollte.

Eine leere Annotationsliste wird als Fehler behandelt und nicht als leeres Ergebnis, denn eine leere Liste bedeutet fast immer, dass der vorgelagerte Extraktionsschritt fehlgeschlagen ist oder die Datei nie eine Annotationsebene hatte — und die stille Rückgabe von null Links würde das verbergen. Derselbe Code läuft kostenlos in Ihrem Browser auf dieser Seite, sodass Sie eine Nutzlast durch Einfügen validieren können und erst zahlen, wenn Sie den Aufruf automatisieren.

Ausgehende Verweise vor der Veröffentlichung prüfen

Inventarisieren Sie jeden Hyperlink eines Berichts oder Vertrags mit Seitenzahlen, damit Prüfer bestätigen können, dass jedes Ziel beabsichtigt und korrekt ist.

Eine Prüfung defekter Links speisen

Übergeben Sie die extrahierten URLs an einen Link-Checker, um tote Ziele in einem Dokument zu finden, das Ihre Kunden gleich herunterladen.

Ein anonymisiertes Dokument verifizieren

Bestätigen Sie, dass die veröffentlichte Version eines PDFs nicht mehr auf interne Staging- oder Partner-URLs verweist, die hätten entfernt werden sollen.

Was kostet das?

Die Ausführung in Ihrem Browser auf dieser Seite ist ebenfalls kostenlos.

Welche Eingabe wird erwartet?

Eine abgeflachte Annotationsliste: ein Datensatz pro Annotation mit der bei 1 beginnenden Seitenzahl, dem Subtyp und, bei Links, der URI. Reader-Bibliotheken wie pdf.js erzeugen dies aus getAnnotations mit einem kleinen Mapping-Schritt.

Warum erhalte ich einen Fehler statt einer leeren Liste?

Ein leeres Annotations-Array bedeutet, dass die vorgelagerte Extraktion fehlgeschlagen ist oder das PDF keine Annotationsebene hat.

Werden interne Seitensprünge einbezogen?

Nein. Link-Annotationen ohne URI sind interne Ziele innerhalb des Dokuments, keine ausgehenden Hyperlinks, und werden übersprungen.

Werden doppelte URLs dedupliziert?

Nein. Ist dieselbe URL auf drei Seiten verlinkt, erhalten Sie drei Einträge, denn jedes Vorkommen trägt seine eigene Seitenzahl und diese Wiederholung ist selbst eine nützliche Information.

Werden die URLs abgerufen oder validiert?

Nein. Die Extraktion ist rein lokal und deterministisch; es werden keine Netzwerkanfragen an die Ziele gestellt.

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.

POSThttps://api.kit.forhosting.com/pdf/extract-links

Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.

curl -X POST https://api.kit.forhosting.com/pdf/extract-links \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"annotations":[{"page":1,"subtype":"Link","uri":"https://example.com/docs"},{"page":1,"subtype":"Text","uri":null},{"page":3,"subtype":"Link","uri":"https://example.com/contact"}]}'
{
  "annotations": [
    {
      "page": 1,
      "subtype": "Link",
      "uri": "https://example.com/docs"
    },
    {
      "page": 1,
      "subtype": "Text",
      "uri": null
    },
    {
      "page": 3,
      "subtype": "Link",
      "uri": "https://example.com/contact"
    }
  ]
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "pdf.extract_links",
  "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.

pro Anfrage$0.002

Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.

max_mb1
max_annotations50000
HTTPCodeBedeutung
401unauthorizedDer API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer).
402insufficient_balanceIhr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht.
404unknown_typeUnbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog.
429rate_limitedZu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt.

Warum Annotationen und nicht Rohtext

Der Vertrag validiert außerdem jeden Datensatz unterwegs: Eine fehlende Seitenzahl, eine nicht ganzzahlige Seite oder ein fehlender Subtyp stoppt den Aufruf mit einem klaren invalid_input-Fehler, statt stillschweigend eine Teilanswer zu liefern, der Sie vertrauen würden.

Vollständige KIT-Dokumentation lesen →