Skip to content

Компоновка (HasLayout)

Trait HasLayout и модуль Layout обеспечивают структуру на уровне страницы: колонтитулы, многоколоночные раскладки и буклетный режим. Модуль состоит из PageManager, ColumnManager, BookletManager и HeaderFooterManager.

Все методы возвращают static, поэтому каждый вызов может быть объединён в цепочку.

Колонтитулы

Встроенный заголовок

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->setHeaderData('logo.png', 30, 'Company Name', 'Generated report — Confidential')
    ->setHeaderMargin(10)
    ->setFooterMargin(10)
    ->addPage();

setHeaderData() принимает путь к логотипу, ширину логотипа, строку заголовка и строку описания.

Пользовательские колбэки

Для полного контроля зарегистрируйте колбэки, получающие экземпляр Document:

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create();

$pdf->setHeaderCallback(function (Document $doc) {
    $doc->setFont('Helvetica', 'B', 12)
        ->cell(0, 10, 'My Company — Confidential', align: 'C', newLine: true)
        ->line(10, 18, 200, 18);
});

$pdf->setFooterCallback(function (Document $doc) {
    $doc->setY(-15)
        ->setFont('Helvetica', '', 8)
        ->cell(0, 10, 'Page ' . $doc->getPage() . '/' . $doc->getNumPages(), align: 'C');
});

$pdf->addPage()
    ->setFont('Helvetica', '', 12)
    ->cell(0, 10, 'Content with custom header and footer');

Включение / Отключение

php
$pdf->setPrintHeader(false);  // Подавить рендеринг заголовка
$pdf->setPrintFooter(false);  // Подавить рендеринг подвала

Поля

php
$pdf->setHeaderMargin(float $margin);  // Отступ над заголовком
$pdf->setFooterMargin(float $margin);  // Отступ под подвалом

Эти поля определяют зазор между краем страницы и содержимым колонтитулов.

Многоколоночная раскладка

Определение колонок

php
$pdf = Document::create()
    ->addPage()
    ->setColumnsArray([
        ['w' => 90, 's' => 5],  // Колонка 1: ширина 90мм, отступ 5мм
        ['w' => 90, 's' => 0],  // Колонка 2: ширина 90мм
    ])
    ->setColumn(0)
    ->setFont('Helvetica', '', 10)
    ->multiCell(0, 5, 'Left column content...')
    ->setColumn(1)
    ->multiCell(0, 5, 'Right column content...');

Каждая запись определяет колонку с w (ширина) и s (отступ). Используйте setColumn() для переключения между колонками.

Методы для колонок

php
$pdf->setColumnsArray(array $columns);  // Определить структуру колонок
$pdf->setColumn(int $col);              // Переключиться на колонку (с 0)
$col = $pdf->getColumn();               // Получить индекс текущей колонки

Буклетный режим

Буклетный режим чередует внутренние и внешние поля для печати и переплёта:

php
$pdf->setBooklet(bool $val, float $inner, float $outer);
ПараметрОписание
$valtrue для включения, false для отключения
$innerВнутреннее (переплётное) поле в мм
$outerВнешнее (краевое) поле в мм
php
$pdf = Document::create()
    ->setBooklet(true, 20, 10)
    ->addPage()   // Нечётная страница: внутреннее поле слева
    ->cell(0, 10, 'Page 1 — wider left margin for binding')
    ->addPage()   // Чётная страница: внутреннее поле справа
    ->cell(0, 10, 'Page 2 — wider right margin for binding');

Смена полей происходит автоматически при каждом вызове addPage().

Выбор подходящего инструмента компоновки

ЗадачаРешение
Единообразное оформление на каждой страницеsetHeaderData() или setHeaderCallback()
Номера страниц в подвалеsetFooterCallback() с getPage() / getNumPages()
Колонки газетного типаsetColumnsArray() + setColumn()
Буклет для печатиsetBooklet()
Убрать заголовок на определённых страницахsetPrintHeader(false) перед addPage()

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