1. Главная
  2. Руководства
  3. API суммирования PDF на JavaScript

Суммирование PDF с помощью JavaScript и Node.js — Руководство по API

Отправляйте запросы к API PDF Summarizer из Node.js (или любой серверной среды JavaScript), используя только fetch и FormData. В этом руководстве рассматриваются первый запрос, стриминг, небольшой эндпоинт Express для вашего приложения и обработка ошибок.

Ключевые факты
  • Работает с Node.js 18+ (встроенные fetch, FormData, Blob) — SDK не нужен.
  • POST https://pdf-summarize.com/api/summarize.php, multipart/form-data, поле file, заголовок Authorization: Bearer sk_....
  • Параметры: length, format, outputLang, includeKeywords.
  • Добавьте ?stream=1 и читайте тело ответа как Server-Sent Events.
  • Никогда не светите ключ в коде браузера — проксируйте запросы через свой сервер.
Обновлено Время чтения: 2 мин Команда PDF Summarizer

Ваш первый запрос в Node.js

  1. Получите бесплатный ключ APIзарегистрируйтесь и скопируйте его в панели управления.
  2. Сохраните его в переменной окруженияPDF_SUMMARIZE_KEY.
  3. Создайте FormDataдобавьте PDF как Blob в поле file.
  4. Отправьте POST-запрос и прочитайте 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} страниц, ${result.processing_time} с, осталось запросов: ${result.requests_remaining}`);

Стриминг сводки

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

Эндпоинт Express для вашего приложения

Ваш фронтенд загружает файл на ваш сервер, который добавляет ключ и пересылает файл дальше:

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: 'Нет файла' });
  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);

Обработка ошибок

Статус Значение
400 Файл отсутствует, это не PDF или превышен лимит страниц
401 Ключ отсутствует или недействителен
413 Файл слишком большой
422 В PDF нет читаемого текста
429 Превышен лимит запросов или квота — повторите попытку позже с задержкой
500 Временная ошибка суммирования — повторите попытку
Оцените движок в делеПопробуйте бесплатный веб-инструмент на одном из ваших PDF.
Попробовать инструмент →

Часто задаваемые вопросы

Можно ли обращаться к API напрямую из браузера?

Технически да, но ваш ключ будет виден любому пользователю. Проксируйте запросы через свой бэкенд, как в примере с Express.

Работает ли это с Deno, Bun или Cloudflare Workers?

Да — любая среда выполнения со стандартными fetch и FormData работает аналогично.

Есть ли TypeScript SDK?

Пока нет. API представляет собой единый эндпоинт multipart, поэтому для него достаточно небольшой обертки с типизацией вокруг fetch.

Где найти полную документацию?

В документации по API, где описаны все параметры и приведены примеры на разных языках.

Материал подготовлен командой PDF Summarizer, которая разрабатывает и поддерживает алгоритмы извлечения текста и суммаризации для этого сайта. Мы тестируем каждый описанный здесь метод на реальных документах. Последняя проверка: 19 октября 2026 г.. Нашли ошибку? Сообщите нам.