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

PDFs zusammenfassen mit JavaScript & Node.js – API-Tutorial

Rufen Sie die PDF Summarizer API von Node.js (oder einer beliebigen serverseitigen JavaScript-Laufzeitumgebung) mit nichts weiter als fetch und FormData auf. Dieses Tutorial behandelt einen ersten Request, Streaming, einen kleinen Express-Endpunkt für Ihre eigene App und die Fehlerbehandlung.

Kernfakten
  • Funktioniert mit Node.js 18+ (integriertes fetch, FormData, Blob) – kein SDK erforderlich.
  • POST https://pdf-summarize.com/api/summarize.php, multipart/form-data, Feld file, Header Authorization: Bearer sk_....
  • Optionen: length, format, outputLang, includeKeywords.
  • Fügen Sie ?stream=1 hinzu und lesen Sie den Antwort-Body als Server-Sent Events (SSE).
  • Geben Sie Ihren API-Schlüssel niemals im Browser-Code preis – leiten Sie Requests über Ihren Server weiter.
Aktualisiert 2 Min. Lesezeit Vom PDF-Summarizer-Team

Ihr erster Request in Node.js

  1. Kostenlosen API-Schlüssel erhaltenRegistrieren Sie sich und kopieren Sie ihn aus Ihrem Dashboard.
  2. In einer Umgebungsvariable speichernPDF_SUMMARIZE_KEY.
  3. FormData erstellenHängen Sie das PDF als Blob unter dem Feld file an.
  4. Als POST senden und das JSON auslesen.
// 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} Seiten, ${result.processing_time}s, ${result.requests_remaining} Verbleibende Requests`);

Zusammenfassung streamen

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

Ein Express-Endpunkt für Ihre eigene App

Ihr Frontend lädt Daten auf Ihren Server hoch, welcher den Schlüssel hinzufügt und die Datei weiterleitet:

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: 'Keine Datei' });
  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);

Fehlerbehandlung

Status Bedeutung
400 Fehlende Datei, kein PDF oder Seitenlimit überschritten
401 Fehlender oder ungültiger Schlüssel
413 Datei zu groß
422 Kein lesbarer Text im PDF gefunden
429 Rate-Limit oder Kontingent erreicht – später mit Backoff erneut versuchen
500 Vorübergehender Fehler bei der Zusammenfassung – erneut versuchen
Erleben Sie die Engine in AktionTesten Sie das kostenlose Web-Tool mit einem Ihrer PDFs.
Tool ausprobieren →

Häufig gestellte Fragen

Kann ich die API direkt aus dem Browser aufrufen?

Technisch ja, aber Ihr Schlüssel wäre für jeden sichtbar. Leiten Sie Requests über Ihr Backend weiter, wie im Express-Beispiel gezeigt.

Funktioniert es mit Deno, Bun oder Cloudflare Workers?

Ja – jede Laufzeitumgebung mit standardisiertem fetch und FormData funktioniert auf dieselbe Weise.

Gibt es ein TypeScript-SDK?

Noch nicht. Die API besteht aus einem einzigen Multipart-Endpunkt, sodass ein kleiner typisierter Wrapper um fetch völlig ausreicht.

Wo finde ich die vollständige Referenz?

In der API-Dokumentation finden Sie alle Parameter und Beispiele in mehreren Sprachen.

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.