Перейти к содержимому

Руководство по выбору интеграции

Spec: ISO/IEC/IEEE 26514:2022, §3.x162 Spec: ISO 24495-1:2023, §5 Evidence: Editorial

Экосистема NextPDF — это небольшой базовый движок и набор узкоспециализированных пакетов: мосты для фреймворков, два рендерера HTML, edge-рендерер и сервер исполнения. Эта страница сопоставляет реальные сценарии с подходящими пакетами и опирается на то, что каждый пакет действительно содержит. Выбор остаётся за вами и основан на фактах, а не на скрытых допущениях документации.

Неверная интеграция обходится дорого, но это проявляется не сразу. Выберите удалённый браузерный рендерер там, где встроенный движок отрисовал бы документ корректно, — и добавите сетевой переход и зависимость от доступности для каждого PDF. Выберите встроенный движок для документа, которому действительно нужен полноценный браузерный движок компоновки, — и получите файл с едва заметными ошибками. Выбранный пакет определяет задержку, режимы отказа и эксплуатационную поверхность, поэтому это решение требует явного обоснования.

  • Начните с базового движка. Всё остальное только дополняет его. Если встроенный движок корректно отрисовывает ваш документ, пакет рендерера вам не нужен.
  • Мост для фреймворка следует за вашим фреймворком, а не за документом. Интеграции для Laravel, Symfony и CodeIgniter дают фасад или фабрику, PDF-ответ, генерацию в очереди и автообнаружение, но не меняют то, что способен отрисовать движок.
  • Используйте рендерер, только когда точность CSS требует браузера. Artisan (локальный Chrome) и Cloudflare (браузер на edge) существуют именно для этого; Gotenberg нужен, чтобы принимать документы Office на вход.
  • Используйте Connect, когда вызывающая сторона — сервис или ИИ-агент, а не вызов из PHP. Он открывает движок по MCP, REST и gRPC со шлюзом одобрения человеком для опасных операций.

Экосистема намеренно разделена на слои, чтобы у каждого пакета была одна задача. Базовый движок отрисовывает PDF в том же процессе. Мост для фреймворка адаптирует этот движок к идиомам фреймворка. Пакет рендерера делегирует компоновку HTML или Office внешнему движку, когда встроенный движок не справляется с задачей. Connect превращает движок в сетевой сервис. Ни один из этих пакетов не перекрывает зону ответственности другого, и поэтому решение остаётся управляемым. Вы не выбираете между конкурирующими инструментами. Вы собираете решение из взаимодополняющих частей.

Принимайте решение исходя из сценария. Таблица сопоставляет каждый сценарий с подходящим пакетом и показывает компромисс, на который вы идёте.

СценарийПодходящий пакетЧто он действительно предоставляетКомпромисс, на который вы идёте
PDF в приложении Laravelnextpdf/laravelАвтообнаруживаемый поставщик служб, фасад Pdf, PdfResponse (inline/скачивание/потоковая передача, заголовки OWASP), задание в очереди GeneratePdfJob с tries/timeout/backoff, безопасные для Octane заблокированные реестрыЗависимость от Laravel 12; возможности движка не меняются
PDF в приложении Symfonynextpdf/symfonyАвтоматически регистрируемый бандл, внедряемый PdfFactory, PdfResponse, необязательный обработчик Messenger для асинхронной генерацииЗависимость от бандла Symfony 7.2; возможности не меняются
PDF в приложении CodeIgniter 4nextpdf/codeigniterservice('pdf') / помощник pdf(), библиотека Pdf, оборачивающая одноразовый Document, PdfResponse, необязательное задание в очередиЗависимость от CodeIgniter 4.6; возможности не меняются
Документу нужен полноценный браузерный CSS (flex/grid/веб-шрифты) рядом со встроенным процессомnextpdf/artisanHeadless Chrome через CDP: страница отрисовывается, а затем импортируется обратно как Form XObject, поэтому текст остаётся выделяемым; пул браузеровСреда выполнения Chrome и её расходы memory/process на вашем хосте
Документы Office (.docx, .xlsx) в PDFnextpdf/gotenbergМост PSR-18 к микросервису Gotenberg с защищённым от SSRF транспортом, привязанным к IPВнешний сервис Gotenberg и сетевая зависимость
HTML→PDF на edge / без локального Chromenextpdf/cloudflareCloudflare Browser Rendering через привязанный транспорт, с необязательным запасным вариантом на локальном ChromeАккаунт Cloudflare и сетевая зависимость; запасной вариант требует Artisan
Движок, который потребляет сервис или ИИ-агентnextpdf/server (Connect)Один движок по MCP (stdio), REST (OpenAPI 3.1) и gRPC; обнаружение инструментов через мягкие зависимости; шлюз подтверждения человеком для инструментов высокого рискаЭксплуатация сервисной поверхности; дисциплина детерминированного исполнения

Эта страница носит редакционный характер: это решение о маршрутизации, но сама маршрутизация основана на том, что содержат манифест и основные классы каждого пакета.

Evidence: Editorial

Мосты реально существуют и устроены параллельно. Каждый объявляет свою зависимость от фреймворка и автоматическую регистрацию в своём composer.json (extra.laravel.providers, extra.symfony.bundles, Registrar в CodeIgniter). Каждый также поставляет PdfResponse, привязку одноразового документа и необязательное задание в очереди. Ни один из них не добавляет возможностей отрисовки — они адаптируют один и тот же движок. Рендереры тоже реальны и различаются между собой. Artisan зависит от chrome-php/chrome и импортирует PDF от Chrome обратно как Form XObject, чтобы текст оставался выделяемым. Gotenberg и Cloudflare — это HTTP-мосты PSR-18 с явно защищёнными от SSRF транспортами, привязанными к IP. Cloudflare может переключиться на Artisan, когда Worker недоступен. composer.json Connect объявляет три транспорта и модель мягких зависимостей: инструменты появляются по мере установки их пакетов и управляются четырёхуровневой моделью риска со шлюзом подтверждения человеком.

Форма, в которой эта страница направляет вас, подкреплена стандартами: Spec: ISO 24495-1:2023, §5 говорит, что читатели должны иметь возможность быстро определить, отвечает ли содержимое их цели, а Spec: ISO/IEC/IEEE 26514:2022, §3.x222 требует, чтобы ссылки и упоминания явно указывали назначение — поэтому в таблице названы конкретный пакет и компромисс, а не дано расплывчатое упоминание “некой интеграции”.

Это решение — последовательность честных вопросов, а не сравнение функций. Следующая схема разбирает распространённые случаи.

1. Does the in-process engine render the document correctly?
YES → you need NO renderer package. Stop here for rendering.
NO → continue.
2. Is the source an Office file (.docx/.xlsx)?
YES → nextpdf/gotenberg (external Gotenberg service).
NO → continue (it is HTML/CSS fidelity you need).
3. Can you run a local Chrome on the host?
YES → nextpdf/artisan (local CDP renderer).
NO → nextpdf/cloudflare (edge; optional Artisan fallback).
Independently of 1–3, choose how the engine is CALLED:
In a PHP web app? → the matching framework bridge.
By a service / AI agent? → nextpdf/server (Connect).
Neither? → use the core engine directly.

Сама структура показывает главное: отрисовка и вызов — это отдельные оси. Когда на них отвечают одним решением, команды приходят к удалённому рендереру, который им не был нужен, или к мосту, не решающему их проблему точности.

Преобладающее заблуждение — “мне нужен пакет рендерера, чтобы создавать PDF.” Это не так. Базовый движок создаёт PDF в том же процессе. Пакеты рендереров существуют только для конкретного случая, когда требуется браузерный движок компоновки или источник — документ Office. Когда встроенный движок уже создаёт корректный файл, рефлекторное подключение рендерера добавляет зависимость во время выполнения и режим отказа без всякой пользы.

Зеркальное заблуждение — “мост для фреймворка открывает возможности.” Это не так. Мост меняет то, как вы вызываете движок — фасад, фабрика, ответ, задание в очереди, — а не то, что он способен создать. Подписание, PDF/A и структурированные счета — это вопросы уровня лицензии и движка, одинаковые независимо от того, вызываете ли вы через мост или напрямую.

  • Эта страница направляет; она не измеряет производительность и не ранжирует пакеты. Она указывает, что предоставляет каждый пакет и в чём компромисс. Выбор между ними вы принимаете с учётом своих ограничений.
  • Возможности пакетов взяты из их манифестов и основных классов на определённый момент времени. Актуальный API проверяйте по собственной документации каждого пакета. Это руководство — карта, а не спецификация.
  • Сравнение с конкурентами не предлагается и не подразумевается. Единственный предмет — это экосистема NextPDF и то, как её части сочетаются друг с другом.
  • Мост для фреймворка и рендерер — это независимые решения. Мост не расширяет возможности движка; рендерер не зависит от фреймворка.
  • Внешние рендереры добавляют зависимость от доступности. Gotenberg и Cloudflare добавляют сетевой вызов и сервис, который нужно эксплуатировать; это принятый компромисс, а не скрытая цена.
  • Возможности, зависящие от уровня лицензии, ортогональны интеграции. Коммерческие функции открываются уровнем лицензии, а не каким-либо мостом или рендерером; см. границу ниже.
Пакеты экосистемы и уровни лицензии — edition availability
Edition Availability
Core

Каждый пакет интеграции (мосты, Artisan, Gotenberg, Cloudflare, Connect) работает с Core и распространяется под Apache-2.0. Они адаптируют движок или открывают к нему доступ; функций они не ограничивают.

Pro

Коммерческие возможности (базовое подписание PAdES, PDF/A, расширенные штрихкоды) открываются уровнем лицензии и затем доступны через любую интеграцию, а не сменой интеграции.

Enterprise

Структурированные счета, политики проверки и шлюз подтверждения человеком в Connect для инструментов высокого риска — это возможности уровня лицензии, и они тоже не зависят от интеграции.

  • Конвейер HTML — что охватывает встроенный движок CSS, чтобы вы понимали, когда браузерный рендерер действительно нужен.
  • Когда не стоит использовать NextPDF — честная граница задач с документами, для которых движок не подходит.
  • Основы PHP 8.4 — минимальный уровень среды выполнения, общий для всех пакетов, и то, за счёт чего сохраняется путь обратного портирования.
  • Базовый движокnextpdf/core, встроенный движок PDF 2.0, на котором строится каждый другой пакет.
  • Мост для фреймворка — пакет интеграции (Laravel/Symfony/CodeIgniter), который адаптирует движок к идиомам фреймворка, не меняя его возможностей.
  • Пакет рендерера — пакет, который делегирует компоновку HTML или Office внешнему движку (Artisan/Cloudflare/Gotenberg), когда встроенный движок не справляется с задачей.
  • Form XObject — повторно используемый фрагмент содержимого PDF; Artisan импортирует отрисованную браузером страницу как один такой фрагмент, чтобы её текст оставался выделяемым.
  • NextPDF Connectnextpdf/server, пакет, открывающий движок по MCP, REST и gRPC с детерминированной поверхностью исполнения.
  • Мягкая зависимость — модель Connect, в которой инструменты появляются автоматически по мере установки необязательных пакетов NextPDF, без изменения кода.