Компоновка (HasLayout)
Trait HasLayout и модуль Layout обеспечивают структуру на уровне страницы: колонтитулы, многоколоночные раскладки и буклетный режим. Модуль состоит из PageManager, ColumnManager, BookletManager и HeaderFooterManager.
Все методы возвращают static, поэтому каждый вызов может быть объединён в цепочку.
Колонтитулы
Встроенный заголовок
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->setHeaderData('logo.png', 30, 'Company Name', 'Generated report — Confidential')
->setHeaderMargin(10)
->setFooterMargin(10)
->addPage();setHeaderData() принимает путь к логотипу, ширину логотипа, строку заголовка и строку описания.
Пользовательские колбэки
Для полного контроля зарегистрируйте колбэки, получающие экземпляр Document:
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');Включение / Отключение
$pdf->setPrintHeader(false); // Подавить рендеринг заголовка
$pdf->setPrintFooter(false); // Подавить рендеринг подвалаПоля
$pdf->setHeaderMargin(float $margin); // Отступ над заголовком
$pdf->setFooterMargin(float $margin); // Отступ под подваломЭти поля определяют зазор между краем страницы и содержимым колонтитулов.
Многоколоночная раскладка
Определение колонок
$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() для переключения между колонками.
Методы для колонок
$pdf->setColumnsArray(array $columns); // Определить структуру колонок
$pdf->setColumn(int $col); // Переключиться на колонку (с 0)
$col = $pdf->getColumn(); // Получить индекс текущей колонкиБуклетный режим
Буклетный режим чередует внутренние и внешние поля для печати и переплёта:
$pdf->setBooklet(bool $val, float $inner, float $outer);| Параметр | Описание |
|---|---|
$val | true для включения, false для отключения |
$inner | Внутреннее (переплётное) поле в мм |
$outer | Внешнее (краевое) поле в мм |
$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() |