1. Home
  2. Gidsen
  3. PDF-samenvattings-API met Python

Pdf's samenvatten met Python — PDF Summary API-tutorial

Voeg pdf-samenvatting toe aan een Python-script, een notebook of een backend in slechts een paar regels. Deze tutorial behandelt authenticatie, een eerste verzoek, de responsindeling, streaming, het verwerken van een hele map en correcte foutafhandeling.

Kernmerken
  • Eindpunt: POST https://pdf-summarize.com/api/summarize.php met multipart/form-data, veld file.
  • Authenticatie: header Authorization: Bearer sk_... — gratis sleutel bij registratie, geen creditcard vereist.
  • Opties: length (short/medium/long/extensive), format (paragraph/bullets/mixed), outputLang (auto of een taalcode), includeKeywords.
  • Respons: JSON met summary, keywords, page_count, processing_time, requests_remaining.
  • Voeg ?stream=1 toe om de samenvatting te ontvangen als Server-Sent Events.
Bijgewerkt 2 min leestijd Door het PDF Summarizer-team

Vereisten

  • Python 3.8+ en de bibliotheek requests (pip install requests).
  • Een API-sleutel: maak een gratis account aan en kopieer je sleutel uit het dashboard. Sla deze op in een omgevingsvariabele in plaats van hardcoded in je code:
export PDF_SUMMARIZE_KEY="sk_live_..."

Je eerste pdf-samenvatting in Python

  1. Requests installerenpip install requests.
  2. Je API-sleutel instellenIn de omgevingsvariabele PDF_SUMMARIZE_KEY.
  3. De pdf versturenAls multipart/form-data met de veldnaam file.
  4. De JSON lezenDe samenvatting staat in summary; controleer success en de 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("Pagina's:", result["page_count"], "| Trefwoorden:", result.get("keywords"))

De respons

{
  "success": true,
  "summary": "- Omzet groeide met 6% tot ...",
  "keywords": "omzet, marge, verwachting, ...",
  "page_count": 48,
  "original_length": 182340,
  "summary_length": 1210,
  "processing_time": 6.214,
  "requests_remaining": 4987
}

requests_remaining is je resterende maandelijkse quotum (-1 betekent onbeperkt).

De samenvatting streamen

Voor lange documenten of interactieve apps kun je de samenvatting streamen terwijl deze wordt gegenereerd:

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")

Een map met pdf's verwerken

import pathlib, time

out_dir = pathlib.Path("samenvattingen")
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                      # hervatvriendelijk
    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"], "pagina's")
            break
        except RuntimeError as e:
            if str(e).startswith("429"):
                time.sleep(30 * (attempt + 1))   # snelheidslimiet: even wachten
            else:
                print("mislukt", pdf.name, e)
                break

Te verwerken fouten

Status Betekenis Wat te doen
400 Ontbrekend bestand, verkeerd type, paginalimiet overschreden Controleer het bestand en de paginalimiet van je abonnement
401 Ontbrekende of ongeldige API-sleutel Controleer de Authorization-header
403 Account opgeschort Neem contact op met de ondersteuning
413 Bestand te groot Comprimeer of splits de pdf
422 Geen leesbare tekst (leeg, beveiligd of onleesbare scan) Verwijder wachtwoord; verbeter de scan
429 Snelheidslimiet of maandelijks quotum bereikt Wacht even en probeer opnieuw, of upgrade
500 Samenvatten tijdelijk niet beschikbaar Probeer het opnieuw met een pauze
Wil je het eerst zonder code testen?Probeer dezelfde engine gratis in je browser.
Probeer de tool →

Tips

  • Stel timeouts ruim in (2-3 minuten) voor lange pdf's.
  • Cache resultaten op basis van bestands-hash om te voorkomen dat je twee keer betaalt voor hetzelfde document.
  • Bewaar sleutels server-side — verzend ze nooit in een frontend- of mobiele app.
  • Volledige parameterreferentie: de API-documentatie.

Veelgestelde vragen

Is er een gratis API-abonnement?

Ja. Het gratis abonnement bevat een maandelijks quotum aan verzoeken zonder creditcard. Bekijk de prijzen.

Kan ik een pdf-url sturen in plaats van een bestand?

De API ontvangt het bestand zelf. Download de pdf in je code (bijv. met requests) en stuur de bytes mee.

In welke talen kan de samenvatting worden gemaakt?

Gebruik outputLang=auto om de taal van het document te behouden, of een taalcode zoals nl, en, fr, es, de.

Hoe vat ik gescande pdf's samen via de API?

Stuur ze op zoals elke andere pdf; de extractiepipeline schakelt automatisch over op OCR wanneer er geen bruikbare tekstlaag is.

Geschreven door het PDF Summarizer-team, de makers van de extractie- en samenvattingpipeline achter deze site. We testen elke methode die hier wordt beschreven op echte documenten. Laatst gecontroleerd op 19 oktober 2026. Een fout gevonden? Laat het ons weten.