Жизненный цикл документа
Класс Document — центральный фасад TCPDF-Next. Он является final, реализует PdfDocumentInterface и предоставляет всю функциональность через 12 компонуемых trait-ов.
Создание документа
php
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create();Конструктор является приватным — всегда используйте статическую фабрику create(). Она инициализирует:
- Размер страницы по умолчанию: A4 (210 × 297 мм)
- Поля по умолчанию: 10 мм симметрично
- Размер шрифта по умолчанию: 12pt
- Цвета по умолчанию: чёрный текст, белая заливка, чёрная обводка
- Толщина линии по умолчанию: 0.2 мм (0.57pt)
Метаданные (HasMetadata)
php
$pdf = Document::create()
->setTitle('Invoice #001')
->setAuthor('Yeeefang')
->setSubject('Monthly Invoice')
->setKeywords('invoice, payment, 2026')
->setCreator('TCPDF-Next')
->setLanguage('en');Все методы метаданных возвращают static для цепочки вызовов. Метаданные записываются как XMP (PDF 2.0) и записи словаря Info.
Настройки просмотра
Управляйте отображением документа в PDF-просмотрщиках:
php
$pdf->setDisplayMode('fullpage', 'SinglePage')
->setViewerPreferences([
'HideToolbar' => true,
'HideMenubar' => true,
'FitWindow' => true,
]);Константы документа
| Константа | Значение | Описание |
|---|---|---|
MAX_PAGES | 10,000 | Максимум страниц в документе |
Внутренняя архитектура
Document хранит ссылки на под-движки, большинство из которых инициализируются лениво:
Document
├── DocumentData # Метаданные, шрифты, изображения, страницы
├── PdfWriter # Сериализация PDF
├── FontManager # Загрузка и подмножественное встраивание шрифтов
├── FontMetrics # Расчёт ширины строк
├── DrawingEngine # Рендеринг фигур/градиентов
├── TransformEngine # CTM-трансформации
├── TextRenderer # Управление состоянием текста
├── HeaderFooter # Рендеринг колонтитулов
├── ColumnLayout # Многоколоночная компоновка
├── BookmarkManager # PDF-закладки
├── LinkManager # Внутренние/внешние ссылки
├── TocBuilder # Оглавление
├── AnnotationManager # Текстовые аннотации
├── PageManager # Управление страницами
├── FormFieldManager? # Поля AcroForm (лениво)
├── LayerManager? # OCG-слои (лениво)
├── TemplateManager? # Шаблоны страниц (лениво)
├── TransactionManager? # Сохранение/откат (лениво)
├── BookletLayout? # Спуск полос для буклета (лениво)
├── FileAttachment? # Встроенные файлы (лениво)
├── JavaScriptManager? # JavaScript документа (лениво)
├── SvgParser? # Рендеринг SVG (лениво)
├── EpsParser? # Рендеринг EPS (лениво)
├── StructureTree? # Tagged PDF (лениво)
├── SpotColorManager? # Плашечные цвета (лениво)
├── ImageLoader? # Загрузка изображений (лениво)
├── BiDiResolver? # Двунаправленный текст (лениво)
├── Aes256Encryptor? # AES-шифрование (лениво)
├── PadesOrchestrator? # Цифровые подписи (лениво)
└── ChromeRenderer? # Chrome CDP (лениво, Artisan)Доступ к под-движкам
Для продвинутых сценариев вы можете получить доступ к внутренним движкам:
php
$fontManager = $pdf->getFontManager();
$writer = $pdf->getWriter();
$drawingEngine = $pdf->getDrawingEngine();
$bookmarkManager = $pdf->getBookmarkManager();Полный пример
php
use Yeeefang\TcpdfNext\Core\Document;
use Yeeefang\TcpdfNext\ValueObjects\PageSize;
use Yeeefang\TcpdfNext\ValueObjects\Margin;
use Yeeefang\TcpdfNext\Contracts\Orientation;
$pdf = Document::create()
// Метаданные
->setTitle('Company Report')
->setAuthor('Finance Team')
->setLanguage('en')
// Первая страница — A4 книжная
->addPage()
->setFont('Helvetica', 'B', 24)
->cell(0, 20, 'Annual Report 2026')
->ln()
// Вторая страница — альбомная
->addPage(PageSize::A4(), Orientation::Landscape)
->setFont('Helvetica', '', 12)
->cell(0, 10, 'Financial Summary')
// Сохранение
->save('report.pdf');