Skip to content

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

MethodMô hình LayoutXuống dòng
cell()Hộp một dòngKhông — văn bản bị cắt
multiCell()Khối nhiều dòngCó — tự xuống dòng theo chiều rộng cell
text()Vị trí tuyệt đốiKhông
write()Chảy inlineCó — chảy như word processor
writeHtml()Khối HTMLCó — layout HTML đầy đủ
writeHtmlCell()HTML trong cell có vị trí
ln()Ngắt dòngN/A

Ví dụ cơ bản

php
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.

php
$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 $newLinetrue).

Căn chỉnh

php
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

php
// 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

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

php
$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,
);
php
$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".

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

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

php
$pdf->writeHtml('<h2>Section Title</h2><p>Paragraph with <b>bold</b> and <i>italic</i> text.</p>');

Bảng

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

php
$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,
);
php
$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.

php
$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ọc

Chọn method phù hợp

Tình huốngMethod
Ô bảng, label, dữ liệu một dòngcell()
Đoạn văn, mô tả, văn bản dàimultiCell()
Watermark, dấu, label tuyệt đốitext()
Văn bản inline với định dạng hỗn hợpwrite()
Nội dung phong phú với HTML markupwriteHtml()
Nội dung HTML tại vị trí cụ thểwriteHtmlCell()

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