Skip to content

Жизненный цикл документа

Класс 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_PAGES10,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');

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