Блог

Як вибрати PDF API у 2026 році: 8 запитань

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

Вибір API для генерації PDF здається простим лише на початку. Постачальників багато, маркетинг звучить схоже, а справжні компроміси видно тільки після тисяч документів у production.

Цей checklist можна використовувати для оцінки vendor. Він нейтральний і базується на реальних проблемах із закупівель, експлуатації та post-mortem. Якщо немає чітких відповідей на всі вісім запитань, рішення ще передчасне.

1. Який формат входу: HTML, JSON чи template DSL?

Це головне питання. Воно визначає, що команда писатиме і що debug-итиме.

  • HTML/CSS (Puppeteer, DocRaptor, Prince): знайомо, гнучко, дорого в runtime, складно зробити deterministic.
  • JSON / структуровані дані (gPdf): дешево render-ити, byte-identical, але потрібен mapper до document model.
  • Template DSL (PDFKit, ReportLab, Apache PDFBox): повний контроль і повна відповідальність за pagination, layout і font fallback.

Немає правильної відповіді для всіх. Є неправильна відповідь для вашої команди. Запитайте інженерів, де вони хочуть виправляти bug pagination три години.

2. Яка cold-start latency і чи вона передбачувана?

WASM і native binary можуть стартувати за microseconds. Chromium-based рішення можуть займати seconds. Різниця проявляється під час traffic spike.

Запитайте p99 першого request на cold worker, коли worker знову стає cold, і чи є cold-start data на status page.

3. Як рахується вартість render?

Моделі:

  • Ціна за сторінку: прогнозовано, але дорого в масштабі.
  • Subscription + overage: часто дешево, але треба оцінювати usage.
  • Compute-based: ви платите за Lambda, containers, Chromium memory і cold start.

Порахуйте рахунок для поточного traffic, 5x і 50x. Крива вартості важливіша за headline price.

4. Чи output deterministic?

Один input має давати ті самі bytes. Це потрібно для PDF diff у CI, податкового зберігання, archive hash і legal review.

Browser-based renderers часто не deterministic між версіями Chromium. Native renderers зазвичай кращі. Запитайте, чи зміняться bytes після engine update.

5. Як обробляються fonts, CJK і RTL?

Fonts часто стають production surprise. Спочатку все працює, а після виходу на новий ринок PDF показує □□□□.

Запитайте, які scripts bundled, що буде з unknown glyph, чи можна передати custom font per request і чи є RTL shaping.

6. Які compliance profiles підтримуються?

Якщо можливі EU invoices, PDF/A archive, XML attachment або digital signatures, вимагайте native support. “Конвертуйте потім іншим tool” означає ще одну pipeline для вас.

Хороші відповіді виглядають як { profile: "PDF/A-3b" } або { einvoice: { format: "factur-x", xml: "..." } }.

7. Rendering stateless? Куди йдуть документи?

Stateless rendering приймає request, повертає PDF і нічого не зберігає. Ви самі керуєте persistence. Це краще для regulated workloads.

Stateful rendering зберігає PDF у vendor і повертає signed URL. Зручно, але третя сторона має копії документів.

8. Що стається при failure?

Кожен renderer іноді падає. Перевірте structured errors, idempotent retry, оплату failed renders, status page, webhooks, p50/p99 по регіонах і synthetic probes.

Відповіді gPdf

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

Якщо input справді HTML і його не можна refactor, DocRaptor або Prince можуть бути кращими.

Підсумок

Не питайте “який PDF API найкращий”. Поставте ці вісім запитань і виберіть vendor під реальний workload. Для invoices, receipts і structured documents перевірте gPdf у Playground.