Layout (HasLayout)
Trait HasLayout và module Layout cung cấp cấu trúc cấp trang: header, footer, layout nhiều cột và chế độ booklet. Module bao gồm PageManager, ColumnManager, BookletManager và HeaderFooterManager.
Mọi method trả về static, nên mỗi lệnh gọi có thể chain.
Header và Footer
Header có sẵn
php
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->setHeaderData('logo.png', 30, 'Company Name', 'Generated report — Confidential')
->setHeaderMargin(10)
->setFooterMargin(10)
->addPage();setHeaderData() chấp nhận đường dẫn logo, chiều rộng logo, chuỗi tiêu đề và chuỗi mô tả.
Callback tùy chỉnh
Để kiểm soát đầy đủ, đăng ký callback nhận instance 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');Bật / Tắt
php
$pdf->setPrintHeader(false); // Tắt render header
$pdf->setPrintFooter(false); // Tắt render footerMargin
php
$pdf->setHeaderMargin(float $margin); // Khoảng cách trên header
$pdf->setFooterMargin(float $margin); // Khoảng cách dưới footerCác margin này định nghĩa khoảng cách giữa cạnh trang và nội dung header/footer.
Layout nhiều cột
Định nghĩa cột
php
$pdf = Document::create()
->addPage()
->setColumnsArray([
['w' => 90, 's' => 5], // Cột 1: rộng 90mm, khoảng cách 5mm
['w' => 90, 's' => 0], // Cột 2: rộng 90mm
])
->setColumn(0)
->setFont('Helvetica', '', 10)
->multiCell(0, 5, 'Nội dung cột trái...')
->setColumn(1)
->multiCell(0, 5, 'Nội dung cột phải...');Mỗi mục định nghĩa cột với w (chiều rộng) và s (khoảng cách). Dùng setColumn() để chuyển giữa các cột.
Method cột
php
$pdf->setColumnsArray(array $columns); // Định nghĩa cấu trúc cột
$pdf->setColumn(int $col); // Chuyển sang cột (đếm từ 0)
$col = $pdf->getColumn(); // Lấy index cột hiện tạiChế độ Booklet
Chế độ booklet luân phiên margin trong và ngoài để trang có thể gập và đóng bìa:
php
$pdf->setBooklet(bool $val, float $inner, float $outer);| Tham số | Mô tả |
|---|---|
$val | true để bật, false để tắt |
$inner | Margin trong (gáy) tính bằng mm |
$outer | Margin ngoài (mép) tính bằng mm |
php
$pdf = Document::create()
->setBooklet(true, 20, 10)
->addPage() // Trang lẻ: margin trong bên trái
->cell(0, 10, 'Page 1 — wider left margin for binding')
->addPage() // Trang chẵn: margin trong bên phải
->cell(0, 10, 'Page 2 — wider right margin for binding');Hoán đổi margin xảy ra tự động mỗi lệnh gọi addPage().
Chọn công cụ Layout phù hợp
| Nhu cầu | Giải pháp |
|---|---|
| Branding nhất quán trên mỗi trang | setHeaderData() hoặc setHeaderCallback() |
| Số trang ở footer | setFooterCallback() với getPage() / getNumPages() |
| Cột kiểu báo | setColumnsArray() + setColumn() |
| Output booklet sẵn in | setBooklet() |
| Bỏ header trên trang nhất định | setPrintHeader(false) trước addPage() |