Xuất văn bản (HasTextOutput)
Trait HasTextOutput cung cấp các method chính để đặt văn bản lên trang. Mỗi method phục vụ mô hình layout khác nhau: cell cố định, văn bản chảy, vị trí tuyệt đối và render HTML.
Tham chiếu nhanh
| Method | Mô hình Layout | Xuống dòng |
|---|---|---|
cell() | Hộp một dòng | Không — văn bản bị cắt |
multiCell() | Khối nhiều dòng | Có — tự xuống dòng theo chiều rộng cell |
text() | Vị trí tuyệt đối | Không |
write() | Chảy inline | Có — chảy như word processor |
writeHtml() | Khối HTML | Có — layout HTML đầy đủ |
writeHtmlCell() | HTML trong cell có vị trí | Có |
ln() | Ngắt dòng | N/A |
Ví dụ cơ bản
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->addPage()
->setFont('Helvetica', '', 12)
->cell(0, 10, 'Single line cell', newLine: true)
->multiCell(0, 10, 'This is a longer text that will automatically wrap to multiple lines when it reaches the edge of the printable area.')
->ln(5)
->text(50.0, 100.0, 'Absolute positioned text')
->write(10, 'Inline text that ')
->write(10, 'continues flowing.');Mọi method trả về static, nên mỗi lệnh gọi có thể chain.
cell()
Vẽ cell hình chữ nhật một dòng với tùy chọn border, fill nền, căn chỉnh và link.
$pdf->cell(
float $w, // Chiều rộng (0 = mở rộng đến margin phải)
float $h, // Chiều cao
string $txt, // Nội dung văn bản
mixed $border = 0, // 0, 1, hoặc tổ hợp 'LTRB'
bool $newLine = false,
string $align = '', // L, C, R, J
bool $fill = false,
mixed $link = '',
);Con trỏ di chuyển sang phải cell (hoặc xuống dòng tiếp khi $newLine là true).
Căn chỉnh
use Yeeefang\TcpdfNext\Contracts\Enums\Alignment;
$pdf->cell(0, 10, 'Left aligned')
->ln()
->cell(0, 10, 'Centered', align: 'C')
->ln()
->cell(0, 10, 'Right aligned', align: 'R')
->ln()
->cell(0, 10, 'Justified text in a cell', align: 'J');Border
// Không border
$pdf->cell(60, 10, 'No border', border: 0);
// Khung đầy đủ
$pdf->cell(60, 10, 'Full frame', border: 1);
// Từng cạnh — Left, Top, Right, Bottom
$pdf->cell(60, 10, 'Top and bottom', border: 'TB');
$pdf->cell(60, 10, 'Left only', border: 'L');Fill
$pdf->setFillColor(230, 230, 250)
->cell(0, 10, 'Lavender background', fill: true, newLine: true);multiCell()
Render khối văn bản nhiều dòng tự xuống dòng theo chiều rộng chỉ định. Sau khi xuất, con trỏ di chuyển xuống dưới cell.
$pdf->multiCell(
float $w, // Chiều rộng (0 = mở rộng đến margin phải)
float $h, // Chiều cao dòng tối thiểu
string $txt, // Nội dung văn bản
mixed $border = 0,
string $align = 'J',
bool $fill = false,
);$pdf->setFont('Helvetica', '', 11)
->multiCell(80, 6, 'This paragraph will wrap at 80mm width. The text flows naturally, respecting word boundaries and hyphenation rules.', border: 1, align: 'J');text()
Đặt chuỗi tại vị trí (x, y) tuyệt đối. Con trỏ không di chuyển sau đó — đây là method "bắn và quên".
$pdf->text(20.0, 50.0, 'Positioned at x=20, y=50');Dùng text() cho watermark, label hoặc nội dung overlay khi bạn kiểm soát vị trí chính xác.
write()
Viết văn bản inline tại vị trí con trỏ hiện tại. Văn bản tự xuống dòng khi đến margin phải, giống như gõ trong word processor.
$pdf->setFont('Helvetica', '', 12)
->write(6, 'This sentence starts here and ')
->setFont('Helvetica', 'B', 12)
->write(6, 'this part is bold')
->setFont('Helvetica', '', 12)
->write(6, ' then back to normal.');Tham số đầu ($h) là chiều cao dòng. Dùng write() khi cần thay đổi font hoặc style giữa câu.
writeHtml()
Render chuỗi HTML bằng bộ phân tích HTML có sẵn. Hỗ trợ các tag phổ biến gồm heading, paragraph, table, list và inline style.
$pdf->writeHtml('<h2>Section Title</h2><p>Paragraph with <b>bold</b> and <i>italic</i> text.</p>');Bảng
$html = '
<table border="1" cellpadding="4">
<thead>
<tr>
<th>Product</th>
<th>Qty</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<tr>
<td>Widget A</td>
<td align="center">10</td>
<td align="right">$25.00</td>
</tr>
<tr>
<td>Widget B</td>
<td align="center">5</td>
<td align="right">$42.50</td>
</tr>
</tbody>
</table>';
$pdf->writeHtml($html);writeHtmlCell()
Kết hợp render HTML với vị trí cell. Nội dung HTML được đặt trong cell tại tọa độ chỉ định.
$pdf->writeHtmlCell(
float $w, // Chiều rộng
float $h, // Chiều cao tối thiểu
float $x, // Vị trí X
float $y, // Vị trí Y
string $html,
mixed $border = 0,
bool $fill = false,
);$pdf->writeHtmlCell(90, 0, 10, 50, '<p style="color:#336699;">Positioned HTML content with <b>formatting</b>.</p>', border: 1);ln()
Chèn ngắt dòng. Con trỏ di chuyển đến margin trái và xuống theo chiều cao chỉ định.
$pdf->ln(); // Ngắt dòng dùng chiều cao cell cuối
$pdf->ln(10); // Ngắt dòng với khoảng cách dọc 10mm
$pdf->ln(0); // Di chuyển đến margin trái mà không di chuyển dọcChọn method phù hợp
| Tình huống | Method |
|---|---|
| Ô bảng, label, dữ liệu một dòng | cell() |
| Đoạn văn, mô tả, văn bản dài | multiCell() |
| Watermark, dấu, label tuyệt đối | text() |
| Văn bản inline với định dạng hỗn hợp | write() |
| Nội dung phong phú với HTML markup | writeHtml() |
| Nội dung HTML tại vị trí cụ thể | writeHtmlCell() |