Философия проектирования
TCPDF-Next вдохновлён TCPDF, но является полной переработкой с нуля для современной эры PHP. Это не форк, не инкрементальное обновление — это совершенно новая библиотека, построенная на архитектуре нового поколения.
Оригинальный TCPDF верно служил PHP-сообществу более десятилетия. Но его однофайловая архитектура на 30 000 строк не может поддержать требования современной генерации PDF: соответствие PDF 2.0, цифровые подписи PAdES, архивирование PDF/A-4 или интеграцию с фреймворками вроде Laravel.
TCPDF-Next сохраняет концепции, знакомые PHP-разработчикам — addPage(), cell(), setFont() — при полной перестройке всего внутреннего устройства для стандартов 2026 года.
Обзор
| Оригинальный TCPDF | TCPDF-Next | |
|---|---|---|
| Версия PHP | 5.x – 8.x | Только 8.5+ |
| Спецификация PDF | 1.4 – 1.7 | 2.0 (ISO 32000-2:2020) |
| Архитектура | Один класс на ~30 000 строк | 213 файлов, 26 модулей, 12 композируемых trait-ов |
| Типобезопасность | Нет | PHPStan Level 10, backed enums, readonly classes |
| Подписи | Базовый PKCS#7 | PAdES 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
Движок PDF 2.0
Chrome CDP
Корпоративный
Laravel 12
Symfony 7
CodeIgniter 4
Миграция 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 |
HasColors | RGB, CMYK, spot-цвета, альфа, режимы наложения |
HasTextOutput | cell(), multiCell(), text(), write(), writeHtml() |
HasDrawing | Фигуры, градиенты, паттерны, SVG, EPS, изображения |
HasTransforms | Масштабирование, вращение, перенос, наклон, зеркалирование |
HasLayout | Колонтитулы, колонки, буклетная вёрстка |
HasNavigation | Закладки, ссылки, оглавление, аннотации, вложения файлов |
HasInteractive | Поля форм, слои, шаблоны, JavaScript |
HasSecurity | Шифрование, цифровые подписи, tagged PDF, BiDi, линеаризация |
HasOutput | output(), save(), getPdfData(), потоковый вывод |
Каждый публичный метод возвращает static для fluent-цепочек:
$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Что дальше
- Глубокий анализ архитектуры — Карта пространств имён, границы модулей, ленивая инициализация
- Создание расширений — Как создавать сторонние расширения
- Почему PHP 8.5+? — Осознанный выбор и руководство по Docker