Блог

Как выбрать PDF API в 2026 году: 8 вопросов

Нейтральный фреймворк для выбора API генерации PDF. Восемь вопросов, которые показывают, будете ли вы довольны через 12 месяцев.

Выбор API для генерации PDF кажется простым только до начала работы. На рынке десятки поставщиков, маркетинг звучит одинаково, а настоящие компромиссы видны лишь после тысяч документов в продакшене.

Этот чеклист можно использовать при оценке поставщиков. Он не привязан к конкретному вендору и основан на реальных инцидентах закупки, эксплуатации и post-mortem. Если нет ясных ответов на все восемь вопросов, информации для выбора недостаточно.

1. Какой формат входа: HTML, JSON или шаблонный DSL?

Это главный вопрос. Он определяет, что ваша команда будет писать и что будет отлаживать в два часа ночи.

  • HTML/CSS (Puppeteer, DocRaptor, Prince): знакомо, очень гибко, дорого в runtime и сложно сделать детерминированным.
  • JSON / структурированные данные (gPdf): дешево рендерить, одинаковые байты на выходе, но нужен mapper из бизнес-модели в модель документа.
  • Template DSL (PDFKit, ReportLab, Apache PDFBox): полный контроль и полная ответственность за пагинацию, layout и fallback шрифтов.

Правильного ответа для всех нет. Есть неправильный ответ для вашей команды. Спросите инженеров, где они предпочли бы искать трехчасовой баг пагинации.

2. Какова cold-start latency и предсказуема ли она?

Некоторые рендереры стартуют за микросекунды, особенно WASM и native binary. Chromium-based решения могут занимать секунды. Разница проявляется на пиках трафика.

Спросите:

  • “Какой p99 у первого запроса на холодный worker?”
  • “Через сколько после последнего запроса worker снова становится cold?”
  • “Публикуете ли вы cold-start data на status page?”

Если нет численного ответа, считайте это плохим знаком.

3. Как считается стоимость одного render?

Три модели чаще всего кусаются:

  • Цена за страницу: предсказуемо, просто бюджетировать, дорого на масштабе.
  • Подписка с overage: дешево при многих объемах, но надо хорошо оценивать usage.
  • Compute-based pricing: вы напрямую платите за Lambda, контейнеры, память Chromium и cold starts.

Посчитайте счет при текущем трафике, 5x и 50x. Форма кривой важнее рекламной цены.

4. Детерминирован ли результат?

Одинаковый input должен давать одинаковые bytes. Это нужно для PDF diff в CI, налогового хранения, архивных hash и юридического review.

Browser-based рендереры обычно не детерминированы между версиями Chromium. Native renderers чаще лучше. Спросите прямо: “Изменятся ли мои bytes после обновления движка?”

5. Как обрабатываются шрифты, CJK и RTL?

Шрифты часто становятся production-инцидентом. В домашнем рынке все хорошо, потом появляется новый script и PDF показывает □□□□.

Спросите, какие scripts встроены без настройки, что будет с неизвестным glyph, можно ли передать custom fonts в запросе, и поддерживается ли RTL shaping. Хороший ответ говорит о NotoSans CJK и понятном fallback.

6. Какие compliance profiles поддерживаются?

Если возможны счета в ЕС, архивирование PDF/A, XML-вложения или цифровые подписи, спрашивайте native support. “Потом конвертируйте другой утилитой” означает pipeline, который теперь обслуживаете вы.

Хороший ответ похож на флаг: { profile: "PDF/A-3b" } или { einvoice: { format: "factur-x", xml: "..." } }.

7. Rendering stateless? Куда попадают документы?

Stateless rendering принимает запрос, возвращает PDF и ничего не хранит. Вы сами управляете persistence. Это лучший вариант для regulated workloads.

Stateful rendering сохраняет PDF у поставщика и возвращает signed URL. Удобно, но третья сторона получает копию каждого документа.

Спросите, где хранится файл, как долго и можно ли получить письменную гарантию stateless rendering.

8. Что происходит при сбое?

Любой renderer иногда падает. Важно, как именно.

  • Структурированный 4xx/5xx или пустой PDF?
  • Retry idempotent?
  • Берется ли плата за failed render?
  • Есть ли status page, webhooks, p50/p99 по регионам?
  • Запускает ли vendor synthetic probes?

Откройте status page прямо сейчас. Если там нет деталей, такой будет и прозрачность после покупки.

Ответы gPdf

#ВопросОтвет gPdf
1InputJSON DocumentRequest
2Cold start5-20 ms, V8 isolate, без браузера
3Cost$0/$5/$8/$12 в месяц; $0.00005/page overage
4DeterminismByte-identical в рамках одной версии движка
5FontsNotoSans CJK + Latin fallback встроены
6CompliancePDF/A-1b/2b/3b/4 + Factur-X / ZUGFeRD
7StatelessДа, без хранения документов
8FailurePublic status page, structured errors, idempotent

Где gPdf не лучший выбор: если input действительно HTML и его нельзя менять, лучше подойдут DocRaptor или Prince.

Итог

Не спрашивайте “какой PDF API лучший”. Задайте эти восемь вопросов, оцените ответы и выберите поставщика под свою реальную нагрузку. Для счетов, чеков и структурированных документов gPdf можно быстро проверить в Playground.