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

Résumer des PDF avec JavaScript et Node.js — Tutoriel API

Appelez l'API PDF Summarizer depuis Node.js (ou tout autre environnement d'exécution JavaScript côté serveur) avec simplement fetch et FormData. Ce tutoriel couvre votre premier appel, le streaming, un petit point de terminaison Express pour votre propre application et la gestion des erreurs.

Points clés
  • Fonctionne avec Node.js 18+ (fetch, FormData, Blob natifs) — aucun SDK requis.
  • POST https://pdf-summarize.com/api/summarize.php, multipart/form-data, champ file, en-tête Authorization: Bearer sk_....
  • Options : length, format, outputLang, includeKeywords.
  • Ajoutez ?stream=1 et lisez le corps de la réponse sous forme de Server-Sent Events (flux d'événements server-sent).
  • N'exposez jamais votre clé dans le code du navigateur — faites transiter les requêtes par votre serveur.
Mis à jour 2 min de lecture Par l'équipe PDF Summarizer

Votre premier appel dans Node.js

  1. Obtenez une clé API gratuiteInscrivez-vous et copiez-la depuis votre tableau de bord.
  2. Stockez-la dans une variable d'environnementPDF_SUMMARIZE_KEY.
  3. Créez un FormDataAjoutez le PDF en tant que Blob sous le champ file.
  4. Envoyez la requête POST et lisez le JSON.
// summarize.mjs — node summarize.mjs report.pdf
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';

const API_URL = 'https://pdf-summarize.com/api/summarize.php';
const KEY = process.env.PDF_SUMMARIZE_KEY;

export async function summarizePdf(path, { length = 'medium', format = 'bullets', outputLang = 'auto' } = {}) {
  const form = new FormData();
  form.append('file', new Blob([await readFile(path)], { type: 'application/pdf' }), basename(path));
  form.append('length', length);
  form.append('format', format);
  form.append('outputLang', outputLang);

  const res = await fetch(API_URL, {
    method: 'POST',
    headers: { Authorization: `Bearer ${KEY}` },
    body: form,
    signal: AbortSignal.timeout(180_000),
  });
  const data = await res.json();
  if (!res.ok || !data.success) throw new Error(`${res.status}: ${data.error ?? JSON.stringify(data)}`);
  return data;
}

const result = await summarizePdf(process.argv[2]);
console.log(result.summary);
console.log(`${result.page_count} pages, ${result.processing_time}s, ${result.requests_remaining} requêtes restantes`);

Générer le résumé en streaming

export async function streamSummary(path, onText) {
  const form = new FormData();
  form.append('file', new Blob([await readFile(path)], { type: 'application/pdf' }), basename(path));
  form.append('length', 'long');

  const res = await fetch(API_URL + '?stream=1', { method: 'POST', headers: { Authorization: `Bearer ${KEY}` }, body: form });
  if (!res.ok) throw new Error(`HTTP ${res.status}`);

  const decoder = new TextDecoder();
  let buffer = '';
  for await (const chunk of res.body) {
    buffer += decoder.decode(chunk, { stream: true });
    const lines = buffer.split('\n');
    buffer = lines.pop();
    for (const line of lines) {
      if (!line.startsWith('data: ')) continue;
      const payload = line.slice(6);
      if (payload === '[DONE]') return;
      const event = JSON.parse(payload);
      if (event.error) throw new Error(event.error);
      if (event.type === 'summary') onText(event.content);
    }
  }
}

await streamSummary('paper.pdf', (t) => process.stdout.write(t));

Un point de terminaison Express pour votre propre application

Votre frontend envoie le fichier à votre serveur, qui ajoute la clé et transmet le fichier :

import express from 'express';
import multer from 'multer';

const app = express();
const upload = multer({ limits: { fileSize: 20 * 1024 * 1024 } });

app.post('/summarize', upload.single('file'), async (req, res) => {
  if (!req.file) return res.status(400).json({ error: 'Aucun fichier' });
  const form = new FormData();
  form.append('file', new Blob([req.file.buffer], { type: 'application/pdf' }), req.file.originalname);
  form.append('length', req.body.length ?? 'medium');
  const r = await fetch('https://pdf-summarize.com/api/summarize.php', {
    method: 'POST', headers: { Authorization: `Bearer ${process.env.PDF_SUMMARIZE_KEY}` }, body: form,
  });
  res.status(r.status).json(await r.json());
});

app.listen(3000);

Gestion des erreurs

Statut Signification
400 Fichier manquant, format non PDF ou limite de pages dépassée
401 Clé manquante ou invalide
413 Fichier trop volumineux
422 Aucun texte lisible dans le PDF
429 Limite de taux ou quota atteint — réessayez plus tard avec une temporisation exponentielle
500 Erreur de résumé temporaire — réessayez
Découvrez le moteur en actionEssayez l'outil web gratuit avec l'un de vos PDF.
Essayer l'outil →

Questions fréquentes

Puis-je appeler l'API directement depuis le navigateur ?

Techniquement oui, mais votre clé serait visible par n'importe qui. Faites transiter les requêtes par votre backend comme dans l'exemple Express.

Est-ce compatible avec Deno, Bun ou Cloudflare Workers ?

Oui — tout environnement d'exécution prenant en charge fetch et FormData de manière standard fonctionne de la même façon.

Existe-t-il un SDK TypeScript ?

Pas encore. L'API consiste en un unique point de terminaison multipart, un petit wrapper typé autour de fetch suffit amplement.

Où se trouve la documentation de référence complète ?

Dans la documentation de l'API, qui détaille tous les paramètres et propose des exemples dans plusieurs langages.

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.