Template (XObject)
PDF Form XObject — gọi là template trong TCPDF-Next — cho phép bạn ghi lại khối nội dung một lần rồi đóng dấu lên bao nhiêu trang tùy ý. Lý tưởng cho header, footer, watermark, logo và bất kỳ phần tử nào lặp lại trong document.
Mọi method trả về static, nên mỗi lệnh gọi có thể chain (trừ startTemplate(), trả về template ID).
Tham chiếu nhanh
| Method | Mục đích |
|---|---|
startTemplate() | Bắt đầu ghi template; trả về template ID |
endTemplate() | Dừng ghi |
printTemplate() | Đặt template đã ghi lên trang hiện tại |
Ví dụ cơ bản
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create();
// Tạo template header tái sử dụng
$tpl = $pdf->startTemplate(190, 20);
$pdf->setFont('Helvetica', 'B', 14)
->setTextColor(255, 102, 0)
->cell(0, 10, 'ACME Corp — Confidential', align: 'C')
->line(0, 18, 190, 18);
$pdf->endTemplate();
// Dùng template trên nhiều trang
$pdf->addPage()
->printTemplate($tpl, 10, 10)
->setFont('Helvetica', '', 12)
->setY(35)
->cell(0, 10, 'Page 1 content', newLine: true)
->addPage()
->printTemplate($tpl, 10, 10)
->setY(35)
->cell(0, 10, 'Page 2 content', newLine: true);startTemplate()
$tpl = $pdf->startTemplate(float $w = 0, float $h = 0): intBắt đầu ghi template mới. Mọi thao tác vẽ sau lệnh gọi này được ghi vào template thay vì render trực tiếp lên trang.
| Tham số | Kiểu | Mô tả |
|---|---|---|
$w | float | Chiều rộng template tính bằng đơn vị người dùng (0 = chiều rộng trang) |
$h | float | Chiều cao template tính bằng đơn vị người dùng (0 = chiều cao trang) |
Trả về integer template ID dùng để tham chiếu template sau này.
WARNING
Không gọi addPage() khi đang ghi template. Template ghi nội dung trong bounding box cố định — chúng không phải trang.
endTemplate()
Dừng ghi và hoàn thiện template. Nội dung vẽ sau lệnh gọi này trở lại trang hiện tại.
printTemplate()
$pdf->printTemplate(int $id, float $x, float $y, float $w = 0, float $h = 0): staticĐóng dấu template đã ghi lên trang hiện tại tại vị trí chỉ định.
| Tham số | Kiểu | Mô tả |
|---|---|---|
$id | int | Template ID trả về từ startTemplate() |
$x | float | Vị trí X trên trang |
$y | float | Vị trí Y trên trang |
$w | float | Chiều rộng hiển thị (0 = chiều rộng template gốc) |
$h | float | Chiều cao hiển thị (0 = chiều cao template gốc) |
Bạn có thể in cùng template ở kích thước khác nhau bằng cách thay đổi $w và $h. Nội dung template được co giãn cho vừa.
Trường hợp sử dụng
Header / Footer lặp lại
$header = $pdf->startTemplate(190, 15);
$pdf->setFont('Helvetica', 'B', 10)
->cell(95, 10, 'Company Name', align: 'L')
->cell(95, 10, date('Y-m-d'), align: 'R');
$pdf->endTemplate();
for ($i = 1; $i <= 5; $i++) {
$pdf->addPage()
->printTemplate($header, 10, 10)
->setY(30)
->cell(0, 10, "Content for page {$i}", newLine: true);
}Logo co giãn
In cùng template ở kích thước khác nhau:
$logo = $pdf->startTemplate(60, 20);
$pdf->image('/path/to/logo.png', 0, 0, 60, 20);
$pdf->endTemplate();
$pdf->addPage()
->printTemplate($logo, 10, 10, 60, 20) // Kích thước gốc
->printTemplate($logo, 10, 40, 30, 10); // Nửa kích thướcMẹo
- Template được lưu dạng PDF Form XObject — nội dung được định nghĩa một lần bất kể in bao nhiêu lần, giữ kích thước file nhỏ.
- Template có thể chứa bất kỳ nội dung vẽ được: text, hình ảnh, hình dạng, và cả template khác.
- Hệ tọa độ bên trong template bắt đầu tại (0, 0) ở góc trên bên trái bounding box.