1. Главная
  2. Руководства
  3. API сводок PDF с Python

Суммирование PDF с помощью Python — Учебник по API сводок PDF

Добавьте функцию суммаризации PDF в скрипт на Python, блокнот Jupyter или бэкенд всего за несколько строк. В этом руководстве рассматриваются аутентификация, первый запрос, формат ответа, стриминг, пакетная обработка папки и правильная обработка ошибок.

Ключевые факты
  • Эндпоинт: POST https://pdf-summarize.com/api/summarize.php с использованием multipart/form-data, поле file.
  • Авторизация: заголовок Authorization: Bearer sk_... — бесплатный ключ при регистрации, без кредитной карты.
  • Параметры: length (short/medium/long/extensive), format (paragraph/bullets/mixed), outputLang (auto или код языка), includeKeywords.
  • Ответ: JSON с полями summary, keywords, page_count, processing_time, requests_remaining.
  • Добавьте ?stream=1, чтобы получать сводку в режиме реального времени через Server-Sent Events.
Обновлено Время чтения: 2 мин Команда PDF Summarizer

Предварительные требования

  • Python 3.8+ и библиотека requests (pip install requests).
  • Ключ API: создайте бесплатную учетную запись и скопируйте ключ из панели управления. Рекомендуется хранить его в переменной окружения, а не в коде:
export PDF_SUMMARIZE_KEY="sk_live_..."

Ваша первая сводка PDF на Python

  1. Установите requestspip install requests.
  2. Установите ключ APIВ переменной окружения PDF_SUMMARIZE_KEY.
  3. Отправьте PDFКак multipart/form-data с именем поля file.
  4. Прочитайте JSONСама сводка находится в поле summary; также проверьте success и статус 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("Страниц:", result["page_count"], "| Ключевые слова:", result.get("keywords"))

Ответ API

{
  "success": true,
  "summary": "- Выручка выросла на 6% до...",
  "keywords": "выручка, маржа, прогноз, ...",
  "page_count": 48,
  "original_length": 182340,
  "summary_length": 1210,
  "processing_time": 6.214,
  "requests_remaining": 4987
}

Поле requests_remaining показывает остаток вашей месячной квоты (-1 означает безлимит).

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

Для длинных документов или интерактивных приложений вы можете получать сводку потоком по мере ее генерации:

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

Пакетная обработка папки с 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                      # удобно для возобновления
    for attempt in range(3):
        try:
            data = summarize_pdf(str(pdf), length="long", fmt="mixed")
            target.write_text(data["summary"], encoding="utf-8")
            print("готово", pdf.name, data["page_count"], "стр.")
            break
        except RuntimeError as e:
            if str(e).startswith("429"):
                time.sleep(30 * (attempt + 1))   # превышен лимит: ждем перед повтором
            else:
                print("ошибка", pdf.name, e)
                break

Возможные ошибки

Статус Значение Что делать
400 Файл не передан, неверный тип, превышен лимит страниц Проверьте файл и лимит страниц вашего тарифного плана
401 Отсутствует или недействителен ключ API Проверьте заголовок Authorization
403 Аккаунт заблокирован Обратитесь в службу поддержки
413 Файл слишком большой Сжатите или разделите PDF-файл
422 Нет читаемого текста (пустой файл, защита или нечитаемый скан) Удалите пароль; улучшите качество сканирования
429 Превышен лимит запросов или месячная квота Подождите и повторите запрос или обновите тариф
500 Функция суммирования временно недоступна Повторите запрос позже с задержкой
Хотите протестировать без написания кода?Попробуйте этот движок бесплатно в браузере.
Попробовать инструмент →

Советы

  • Задавайте таймауты с запасом (2–3 минуты) для обработки больших PDF-файлов.
  • Кэшируйте результаты по хэшу файла, чтобы не платить дважды за обработку одного и того же документа.
  • Храните ключи на сервере — никогда не встраивайте их во фронтенд или мобильные приложения.
  • Полный справочник параметров доступен в документации по API.

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

Доступен ли бесплатный тариф API?

Да. Бесплатный тариф включает месячную квоту запросов без необходимости указывать данные кредитной карты. См. страницу тарифов.

Можно ли передать URL вместо файла PDF?

API принимает сам файл. Скачайте PDF в своем коде (например, с помощью requests) и отправьте его байты.

На каких языках можно получить сводку?

Используйте параметр outputLang=auto, чтобы сохранить язык исходного документа, или укажите код языка, например en, fr, es, de.

Как обрабатывать сканированные PDF-файлы через API?

Отправляйте их так же, как любые другие PDF: если текстовый слой отсутствует, система автоматически задействует OCR-распознавание.

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