Вывод текста (HasTextOutput)
Trait HasTextOutput предоставляет основные методы размещения текста на странице. Каждый метод обслуживает свою модель компоновки: фиксированные ячейки, потоковый текст, абсолютное позиционирование и HTML-рендеринг.
Краткий справочник
| Метод | Модель компоновки | Перенос строк |
|---|---|---|
cell() | Однострочная ячейка | Нет — текст обрезается |
multiCell() | Многострочный блок | Да — автоперенос по ширине ячейки |
text() | Абсолютная позиция | Нет |
write() | Инлайн-поток | Да — течёт как в текстовом процессоре |
writeHtml() | HTML-блок | Да — полная HTML-компоновка |
writeHtmlCell() | HTML в позиционированной ячейке | Да |
ln() | Перенос строки | Н/Д |
Базовый пример
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()
Рисует однострочную прямоугольную ячейку с опциональной рамкой, фоновой заливкой, выравниванием и ссылкой.
$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).
Выравнивание
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');Рамки
// Без рамки
$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');Заливка
$pdf->setFillColor(230, 230, 250)
->cell(0, 10, 'Lavender background', fill: true, newLine: true);multiCell()
Рендерит многострочный текстовый блок с автопереносом в пределах указанной ширины. После вывода курсор перемещается под ячейку.
$pdf->multiCell(
float $w, // Ширина (0 = расширить до правого поля)
float $h, // Минимальная высота строки
string $txt, // Текстовое содержимое
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()
Размещает строку в абсолютной позиции (x, y). Курсор не перемещается — это метод «выстрелил и забыл».
$pdf->text(20.0, 50.0, 'Positioned at x=20, y=50');Используйте text() для водяных знаков, меток или наложенного контента, где вы контролируете точную позицию.
write()
Записывает текст инлайн в текущей позиции курсора. Текст переносится автоматически при достижении правого поля, как при наборе в текстовом процессоре.
$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-парсера. Поддерживает основные теги, включая заголовки, параграфы, таблицы, списки и инлайн-стили.
$pdf->writeHtml('<h2>Section Title</h2><p>Paragraph with <b>bold</b> and <i>italic</i> text.</p>');Таблицы
$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-контент размещается внутри ячейки по указанным координатам.
$pdf->writeHtmlCell(
float $w, // Ширина
float $h, // Минимальная высота
float $x, // Позиция X
float $y, // Позиция 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()
Вставляет перенос строки. Курсор перемещается к левому полю и вниз на указанную высоту.
$pdf->ln(); // Перенос строки с использованием высоты последней ячейки
$pdf->ln(10); // Перенос строки с вертикальным отступом 10 мм
$pdf->ln(0); // Переход к левому полю без вертикального смещенияВыбор правильного метода
| Сценарий | Метод |
|---|---|
| Ячейки таблиц, метки, однострочные данные | cell() |
| Параграфы, описания, длинный текст | multiCell() |
| Водяные знаки, штампы, абсолютные метки | text() |
| Инлайн-текст с различным форматированием | write() |
| Богатый контент с HTML-разметкой | writeHtml() |
| HTML-контент в определённой позиции | writeHtmlCell() |