1. Accueil
  2. Guides
  3. API de résumé de PDF avec Python

Résumer des PDF avec Python — Tutoriel API de résumé de PDF

Ajoutez la génération de résumés PDF à un script Python, un notebook ou un backend en quelques lignes. Ce tutoriel couvre l'authentification, une première requête, le format de réponse, le streaming, le traitement d'un dossier entier et la gestion correcte des erreurs.

Points clés
  • Point de terminaison : POST https://pdf-summarize.com/api/summarize.php avec multipart/form-data, champ file.
  • Authentification : en-tête Authorization: Bearer sk_... — clé gratuite à l'inscription, sans carte bancaire.
  • Options : length (short/medium/long/extensive), format (paragraph/bullets/mixed), outputLang (auto ou un code langue), includeKeywords.
  • Réponse : JSON avec summary, keywords, page_count, processing_time, requests_remaining.
  • Ajoutez ?stream=1 pour recevoir le résumé sous forme de Server-Sent Events.
Mis à jour 2 min de lecture Par l'équipe PDF Summarizer

Prérequis

  • Python 3.8+ et la bibliothèque requests (pip install requests).
  • Une clé API : créez un compte gratuit et copiez votre clé depuis le tableau de bord. Stockez-la dans une variable d'environnement plutôt que directement dans le code :
export PDF_SUMMARIZE_KEY="sk_live_..."

Votre premier résumé de PDF en Python

  1. Installer requestspip install requests.
  2. Définir votre clé APIDans la variable d'environnement PDF_SUMMARIZE_KEY.
  3. Envoyer le PDFAu format multipart/form-data avec le nom de champ file.
  4. Lire le JSONLe résumé se trouve dans summary ; vérifiez success et le code d'état HTTP.
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("Pages :", result["page_count"], "| Mots-clés :", result.get("keywords"))

La réponse

{
  "success": true,
  "summary": "- Le chiffre d'affaires a progressé de 6 % pour atteindre...",
  "keywords": "chiffre d'affaires, marge, prévisions, ...",
  "page_count": 48,
  "original_length": 182340,
  "summary_length": 1210,
  "processing_time": 6.214,
  "requests_remaining": 4987
}

requests_remaining correspond à votre quota mensuel restant (-1 indique un nombre illimité).

Diffuser le résumé en continu (streaming)

Pour les documents longs ou les applications interactives, streamez le résumé au fur et à mesure de sa génération :

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

Traiter un dossier de PDF

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                      # Reprise possible (resume-friendly)
    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"], "pages")
            break
        except RuntimeError as e:
            if str(e).startswith("429"):
                time.sleep(30 * (attempt + 1))   # Limite de taux : attente exponentielle
            else:
                print("échec", pdf.name, e)
                break

Erreurs à gérer

Statut Signification Que faire
400 Fichier manquant, mauvais type, limite de pages dépassée Vérifiez le fichier et la limite de pages de votre offre
401 Clé API manquante ou invalide Vérifiez l'en-tête Authorization
403 Compte suspendu Contactez le support
413 Fichier trop volumineux Compressez ou divisez le PDF
422 Aucun texte lisible (vide, protégé ou scan illisible) Supprimez le mot de passe ; améliorez la qualité du scan
429 Limite de requêtes ou quota mensuel atteint Attendez avant de réessayer ou passez à l'offre supérieure
500 Résumé temporairement indisponible Réessayez après une pause
Vous voulez tester sans coder ?Essayez le même moteur directement dans votre navigateur, gratuitement.
Essayer l'outil →

Astuces

  • Définissez des délais d'attente (timeouts) généreux (2 à 3 minutes) pour les PDF longs.
  • Mettez en cache les résultats en fonction du hachage du fichier pour éviter de payer deux fois pour le même document.
  • Gardez les clés côté serveur — ne les incluez jamais dans une application front-end ou mobile.
  • Référence complète des paramètres : la documentation de l'API.

Questions fréquentes

Existe-t-il une formule d'API gratuite ?

Oui. La formule gratuite comprend un quota mensuel de requêtes sans nécessiter de carte bancaire. Consultez les tarifs.

Puis-je envoyer l'URL d'un PDF au lieu d'un fichier ?

L'API prend le fichier lui-même en charge. Téléchargez le PDF dans votre code (par exemple avec requests) et envoyez les octets correspondants.

Dans quelles langues le résumé peut-il être rédigé ?

Utilisez outputLang=auto pour conserver la langue du document, ou spécifiez un code de langue tel que en, fr, es, de.

Comment résumer des PDF scannés via l'API ?

Envoyez-les comme n'importe quel PDF ; le pipeline d'extraction bascule automatiquement vers l'OCR lorsqu'aucune couche de texte exploitable n'est détectée.

Rédigé par l'équipe PDF Summarizer, qui conçoit et exploite le pipeline d'extraction et de résumé derrière ce site. Nous testons chaque méthode décrite ici sur des documents réels. Dernière vérification : 19 octobre 2026. Une erreur ? Signalez-la.