Skip to content

Философия проектирования

TCPDF-Next вдохновлён TCPDF, но является полной переработкой с нуля для современной эры PHP. Это не форк, не инкрементальное обновление — это совершенно новая библиотека, построенная на архитектуре нового поколения.

Оригинальный TCPDF верно служил PHP-сообществу более десятилетия. Но его однофайловая архитектура на 30 000 строк не может поддержать требования современной генерации PDF: соответствие PDF 2.0, цифровые подписи PAdES, архивирование PDF/A-4 или интеграцию с фреймворками вроде Laravel.

TCPDF-Next сохраняет концепции, знакомые PHP-разработчикам — addPage(), cell(), setFont() — при полной перестройке всего внутреннего устройства для стандартов 2026 года.

Обзор

Оригинальный TCPDFTCPDF-Next
Версия PHP5.x – 8.xТолько 8.5+
Спецификация PDF1.4 – 1.72.0 (ISO 32000-2:2020)
АрхитектураОдин класс на ~30 000 строк213 файлов, 26 модулей, 12 композируемых trait-ов
ТипобезопасностьНетPHPStan Level 10, backed enums, readonly classes
ПодписиБазовый PKCS#7PAdES B-B (Core) до B-LTA (Pro)
АрхивированиеPDF/A-1b (частично)PDF/A-4 (ISO 19005-4:2020)
Рендеринг HTMLВстроенный (ограниченный CSS)Встроенный + Chrome CDP (полный CSS3)
Тестирование~50 тестов908+ тестов, 28 881+ утверждений
РасширяемостьНаследование монолитаМодульная экосистема + API расширений

Архитектура экосистемы

TCPDF-Next — не монолит. Это модульная экосистема из четырёх пакетов, каждый с чётко определённой ответственностью:

Core TCPDF-Next
Core
Функциональные
Core Core
Движок PDF 2.0
Artisan Artisan
Chrome CDP
Pro Pro
Корпоративный
Интеграция с фреймворками
Laravel Laravel
Laravel 12
Symfony Symfony
Symfony 7
CodeIgniter CodeIgniter
CodeIgniter 4
Совместимость
Adaptation Adaptation
Миграция TCPDF
  • Core (148 файлов) — Движок PDF. Всё необходимое для генерации документов, типографики, штрих-кодов, шифрования и подписей PAdES B-B.
  • Artisan (17 файлов) — Интеграция Chrome CDP для пиксельно-точного рендеринга HTML/CSS3. Текстовый PDF-вывод через Form XObjects, а не растеризованные изображения.
  • Laravel (4 файла) — Интеграция с фреймворком без конфигурации. Facade, HTTP-ответы, задания очереди, привязки для Octane.
  • Pro (47 файлов) — Корпоративные функции. PAdES B-T до B-LTA, PDF/A-4, подпись через HSM, специализированные штрих-коды.

API расширений открыт: сторонние разработчики могут создавать собственные расширения, которые подключаются к Core через опубликованные интерфейсы (PdfDocumentInterface, SignerInterface, FontManagerInterface, HsmSignerInterface).

12 композируемых Trait-ов

Класс Document — единая точка входа. Вместо монолитного класса его функциональность собрана из 12 специализированных trait-ов:

TraitОтветственность
HasMetadataЗаголовок, автор, тема, ключевые слова, язык
HasPagesУправление страницами, размеры, поля, группы страниц
HasTypographyЗагрузка шрифтов, размеры, оформление текста, RTL, BiDi
HasColorsRGB, CMYK, spot-цвета, альфа, режимы наложения
HasTextOutputcell(), multiCell(), text(), write(), writeHtml()
HasDrawingФигуры, градиенты, паттерны, SVG, EPS, изображения
HasTransformsМасштабирование, вращение, перенос, наклон, зеркалирование
HasLayoutКолонтитулы, колонки, буклетная вёрстка
HasNavigationЗакладки, ссылки, оглавление, аннотации, вложения файлов
HasInteractiveПоля форм, слои, шаблоны, JavaScript
HasSecurityШифрование, цифровые подписи, tagged PDF, BiDi, линеаризация
HasOutputoutput(), save(), getPdfData(), потоковый вывод

Каждый публичный метод возвращает static для fluent-цепочек:

php
$pdf = Document::create()
    ->setTitle('Invoice')       // HasMetadata
    ->addPage()                 // HasPages
    ->setFont('Helvetica', '', 12) // HasTypography
    ->setFillColor(240, 240, 240)  // HasColors
    ->cell(0, 10, 'Hello')     // HasTextOutput
    ->save('invoice.pdf');      // HasOutput

Что дальше

Распространяется по лицензии LGPL-3.0-or-later.