Skip to content

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

MethodMụ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

php
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()

php
$tpl = $pdf->startTemplate(float $w = 0, float $h = 0): int

Bắ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ểuMô tả
$wfloatChiều rộng template tính bằng đơn vị người dùng (0 = chiều rộng trang)
$hfloatChiề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()

php
$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ểuMô tả
$idintTemplate ID trả về từ startTemplate()
$xfloatVị trí X trên trang
$yfloatVị trí Y trên trang
$wfloatChiều rộng hiển thị (0 = chiều rộng template gốc)
$hfloatChiề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$h. Nội dung template được co giãn cho vừa.

Trường hợp sử dụng

php
$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:

php
$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ước

Mẹ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.

Phân phối theo giấy phép LGPL-3.0-or-later.