Skip to content

Вывод текста (HasTextOutput)

Trait HasTextOutput предоставляет основные методы размещения текста на странице. Каждый метод обслуживает свою модель компоновки: фиксированные ячейки, потоковый текст, абсолютное позиционирование и HTML-рендеринг.

Краткий справочник

МетодМодель компоновкиПеренос строк
cell()Однострочная ячейкаНет — текст обрезается
multiCell()Многострочный блокДа — автоперенос по ширине ячейки
text()Абсолютная позицияНет
write()Инлайн-потокДа — течёт как в текстовом процессоре
writeHtml()HTML-блокДа — полная HTML-компоновка
writeHtmlCell()HTML в позиционированной ячейкеДа
ln()Перенос строкиН/Д

Базовый пример

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.');

Все методы возвращают static, поэтому каждый вызов может быть объединён в цепочку.

cell()

Рисует однострочную прямоугольную ячейку с опциональной рамкой, фоновой заливкой, выравниванием и ссылкой.

php
$pdf->cell(
    float  $w,           // Ширина (0 = расширить до правого поля)
    float  $h,           // Высота
    string $txt,         // Текстовое содержимое
    mixed  $border = 0,  // 0, 1 или комбинация 'LTRB'
    bool   $newLine = false,
    string $align  = '',  // L, C, R, J
    bool   $fill   = false,
    mixed  $link   = '',
);

Курсор перемещается вправо от ячейки (или на следующую строку, если $newLine = true).

Выравнивание

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');

Рамки

php
// Без рамки
$pdf->cell(60, 10, 'No border', border: 0);

// Полная рамка
$pdf->cell(60, 10, 'Full frame', border: 1);

// Отдельные стороны — Left, Top, Right, Bottom
$pdf->cell(60, 10, 'Top and bottom', border: 'TB');
$pdf->cell(60, 10, 'Left only', border: 'L');

Заливка

php
$pdf->setFillColor(230, 230, 250)
    ->cell(0, 10, 'Lavender background', fill: true, newLine: true);

multiCell()

Рендерит многострочный текстовый блок с автопереносом в пределах указанной ширины. После вывода курсор перемещается под ячейку.

php
$pdf->multiCell(
    float  $w,           // Ширина (0 = расширить до правого поля)
    float  $h,           // Минимальная высота строки
    string $txt,         // Текстовое содержимое
    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()

Размещает строку в абсолютной позиции (x, y). Курсор не перемещается — это метод «выстрелил и забыл».

php
$pdf->text(20.0, 50.0, 'Positioned at x=20, y=50');

Используйте text() для водяных знаков, меток или наложенного контента, где вы контролируете точную позицию.

write()

Записывает текст инлайн в текущей позиции курсора. Текст переносится автоматически при достижении правого поля, как при наборе в текстовом процессоре.

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.');

Первый параметр ($h) — высота строки. Используйте write(), когда нужно менять шрифт или стиль внутри предложения.

writeHtml()

Рендерит HTML-строку с помощью встроенного HTML-парсера. Поддерживает основные теги, включая заголовки, параграфы, таблицы, списки и инлайн-стили.

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

Таблицы

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

Комбинирует HTML-рендеринг с позиционированием ячейки. HTML-контент размещается внутри ячейки по указанным координатам.

php
$pdf->writeHtmlCell(
    float  $w,     // Ширина
    float  $h,     // Минимальная высота
    float  $x,     // Позиция X
    float  $y,     // Позиция 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()

Вставляет перенос строки. Курсор перемещается к левому полю и вниз на указанную высоту.

php
$pdf->ln();       // Перенос строки с использованием высоты последней ячейки
$pdf->ln(10);     // Перенос строки с вертикальным отступом 10 мм
$pdf->ln(0);      // Переход к левому полю без вертикального смещения

Выбор правильного метода

СценарийМетод
Ячейки таблиц, метки, однострочные данныеcell()
Параграфы, описания, длинный текстmultiCell()
Водяные знаки, штампы, абсолютные меткиtext()
Инлайн-текст с различным форматированиемwrite()
Богатый контент с HTML-разметкойwriteHtml()
HTML-контент в определённой позицииwriteHtmlCell()

Распространяется по лицензии LGPL-3.0-or-later.