1. Startseite
  2. Ratgeber
  3. PDF-Zusammenfassungs-API mit Python

PDFs mit Python zusammenfassen — PDF-Zusammenfassungs-API-Tutorial

Fügen Sie einem Python-Skript, Notebook oder Backend mit wenigen Zeilen eine PDF-Zusammenfassungsfunktion hinzu. Dieses Tutorial deckt Authentifizierung, die erste Anfrage, das Antwortformat, Streaming, die Verarbeitung ganzer Ordner und ordnungsgemäßes Fehlerhandling ab.

Kernfakten
  • Endpunkt: POST https://pdf-summarize.com/api/summarize.php mit multipart/form-data, Feld file.
  • Auth: Header Authorization: Bearer sk_... – kostenloser Key bei Registrierung, keine Kreditkarte.
  • Optionen: length (short/medium/long/extensive), format (paragraph/bullets/mixed), outputLang (auto oder Sprachcode), includeKeywords.
  • Antwort: JSON mit summary, keywords, page_count, processing_time, requests_remaining.
  • Fügen Sie ?stream=1 hinzu, um die Zusammenfassung als Server-Sent Events zu empfangen.
Aktualisiert 2 Min. Lesezeit Vom PDF-Summarizer-Team

Voraussetzungen

  • Python 3.8+ und die Bibliothek requests (pip install requests).
  • Ein API-Key: Erstellen Sie ein kostenloses Konto und kopieren Sie Ihren Key aus dem Dashboard. Speichern Sie ihn in einer Umgebungsvariable statt direkt im Code:
export PDF_SUMMARIZE_KEY="sk_live_..."

Ihre erste PDF-Zusammenfassung in Python

  1. Requests installierenpip install requests.
  2. API-Key festlegenIn der Umgebungsvariable PDF_SUMMARIZE_KEY.
  3. PDF sendenAls multipart/form-data mit dem Feldnamen file.
  4. JSON auslesenDie Zusammenfassung befindet sich in summary; prüfen Sie success und den HTTP-Status.
import os
import requests

API_URL = "https://pdf-summarize.com/api/summarize.php"
API_KEY = os.environ["PDF_SUMMARIZE_KEY"]

def summarize_pdf(path, length="medium", fmt="bullets", lang="auto"):
    with open(path, "rb") as f:
        resp = requests.post(
            API_URL,
            headers={"Authorization": f"Bearer {API_KEY}"},
            files={"file": (os.path.basename(path), f, "application/pdf")},
            data={"length": length, "format": fmt, "outputLang": lang, "includeKeywords": "1"},
            timeout=180,
        )
    data = resp.json()
    if resp.status_code != 200 or not data.get("success"):
        raise RuntimeError(f"{resp.status_code}: {data.get('error', data)}")
    return data

result = summarize_pdf("annual-report.pdf")
print(result["summary"])
print("Seiten:", result["page_count"], "| Schlüsselwörter:", result.get("keywords"))

Die Antwort

{
  "success": true,
  "summary": "- Der Umsatz stieg um 6 % auf ...",
  "keywords": "Umsatz, Marge, Prognose, ...",
  "page_count": 48,
  "original_length": 182340,
  "summary_length": 1210,
  "processing_time": 6.214,
  "requests_remaining": 4987
}

requests_remaining ist Ihr verbleibendes monatliches Kontingent (-1 bedeutet unbegrenzt).

Zusammenfassung streamen

Für lange Dokumente oder interaktive Anwendungen können Sie die Zusammenfassung während der Generierung streamen:

import json

def stream_summary(path):
    with open(path, "rb") as f:
        with requests.post(
            API_URL + "?stream=1",
            headers={"Authorization": f"Bearer {API_KEY}"},
            files={"file": (os.path.basename(path), f, "application/pdf")},
            data={"length": "long", "format": "mixed"},
            stream=True, timeout=300,
        ) as resp:
            resp.raise_for_status()
            for line in resp.iter_lines(decode_unicode=True):
                if not line or not line.startswith("data: "):
                    continue
                payload = line[6:]
                if payload == "[DONE]":
                    break
                event = json.loads(payload)
                if "error" in event:
                    raise RuntimeError(event["error"])
                if event.get("type") == "summary":
                    print(event["content"], end="", flush=True)

stream_summary("research-paper.pdf")

Einen Ordner voller PDFs verarbeiten

import pathlib, time

out_dir = pathlib.Path("summaries")
out_dir.mkdir(exist_ok=True)

for pdf in sorted(pathlib.Path("pdfs").glob("*.pdf")):
    target = out_dir / (pdf.stem + ".md")
    if target.exists():
        continue                      # Unterbrechungssicher
    for attempt in range(3):
        try:
            data = summarize_pdf(str(pdf), length="long", fmt="mixed")
            target.write_text(data["summary"], encoding="utf-8")
            print("ok", pdf.name, data["page_count"], "Seiten")
            break
        except RuntimeError as e:
            if str(e).startswith("429"):
                time.sleep(30 * (attempt + 1))   # Rate-Limit: Warten und erneut versuchen
            else:
                print("fehlgeschlagen", pdf.name, e)
                break

Zu behandelnde Fehler

Status Bedeutung Maßnahme
400 Fehlende Datei, falscher Typ, Seitenlimit überschritten Datei und Seitenlimit Ihres Tarifs überprüfen
401 Fehlender oder ungültiger API-Key Authorization-Header überprüfen
403 Konto gesperrt Support kontaktieren
413 Datei zu groß PDF komprimieren oder aufteilen
422 Kein lesbarer Text (leer, geschützt oder unlesbarer Scan) Passwort entfernen; Scan-Qualität verbessern
429 Rate-Limit oder monatliches Kontingent erreicht Warten und wiederholen oder Tarif upgraden
500 Zusammenfassung vorübergehend nicht verfügbar Mit Wartezeit erneut versuchen
Möchten Sie es zuerst ohne Code testen?Probieren Sie dieselbe Engine kostenlos in Ihrem Browser aus.
Tool ausprobieren →

Tipps

  • Timeouts großzügig bemessen (2–3 Minuten) für lange PDFs.
  • Ergebnisse nach Datei-Hash cachen, um dasselbe Dokument nicht doppelt zu bezahlen.
  • Keys auf dem Server behalten — geben Sie diese niemals in Frontends oder Mobil-Apps weiter.
  • Vollständige Parameter-Referenz: Die API-Dokumentation.

Häufig gestellte Fragen

Gibt es einen kostenlosen API-Tarif?

Ja. Der kostenlose Tarif beinhaltet ein monatliches Abfragekontingent ganz ohne Kreditkarte. Siehe Preise.

Kann ich eine PDF-URL statt einer Datei senden?

Die API nimmt die Datei direkt entgegen. Laden Sie das PDF in Ihrem Code herunter (z. B. mit requests) und senden Sie die Rohdaten (Bytes).

In welchen Sprachen kann die Zusammenfassung erstellt werden?

Verwenden Sie outputLang=auto, um die Sprache des Dokuments beizubehalten, oder einen Sprachcode wie en, fr, es, de.

Wie fasse ich gescannte PDFs über die API zusammen?

Senden Sie sie wie jede andere PDF-Datei; die Texterkennung greift automatisch auf OCR zurück, wenn keine nutzbare Textebene vorhanden ist.

Verfasst vom PDF-Summarizer-Team, das die Extraktions- und Zusammenfassungspipeline hinter dieser Website entwickelt und betreibt. Wir testen jede hier beschriebene Methode an echten Dokumenten. Zuletzt geprüft am 19. Oktober 2026. Einen Fehler gefunden? Sagen Sie es uns.