Skip to content

Типографика (HasTypography)

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

Установка шрифтов

setFont()

Устанавливает текущее семейство шрифта, стиль и размер одним вызовом.

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->addPage()
    ->setFont('Helvetica', '', 12)
    ->cell(0, 10, 'Normal text', newLine: true)
    ->setFont('Helvetica', 'B', 14)
    ->cell(0, 10, 'Bold text', newLine: true)
    ->setFont('Helvetica', 'BI', 16)
    ->cell(0, 10, 'Bold Italic text', newLine: true);

Стили шрифта

Комбинируйте символы стилей для применения нескольких эффектов:

КодСтиль
''Обычный
'B'Жирный
'I'Курсив
'BI'Жирный курсив
'U'Подчёркивание
'D'Зачёркивание
'O'Надчёркивание

Стили можно свободно комбинировать: 'BIU' создаёт жирный курсивный подчёркнутый текст.

php
$pdf->setFont('Helvetica', 'BU', 12)
    ->cell(0, 10, 'Bold + Underline', newLine: true)
    ->setFont('Helvetica', 'ID', 12)
    ->cell(0, 10, 'Italic + Strikethrough', newLine: true)
    ->setFont('Helvetica', 'BO', 12)
    ->cell(0, 10, 'Bold + Overline', newLine: true);

setFontSize()

Изменяет размер шрифта без смены семейства или стиля.

php
$pdf->setFont('Helvetica', 'B', 12)
    ->cell(0, 10, '12pt heading', newLine: true)
    ->setFontSize(10)
    ->cell(0, 10, '10pt body text', newLine: true)
    ->setFontSize(8)
    ->cell(0, 10, '8pt footnote', newLine: true);

Интервал и масштабирование

setFontSpacing()

Регулирует дополнительное расстояние (в пунктах), вставляемое между каждой парой символов.

php
$pdf->setFont('Helvetica', '', 12)
    ->setFontSpacing(0)
    ->cell(0, 10, 'Normal spacing', newLine: true)
    ->setFontSpacing(1.5)
    ->cell(0, 10, 'Expanded spacing', newLine: true)
    ->setFontSpacing(-0.5)
    ->cell(0, 10, 'Tight spacing', newLine: true)
    ->setFontSpacing(0);

setFontStretching()

Применяет горизонтальное масштабирование к глифам. Значение 100 — нормальная ширина.

php
$pdf->setFont('Helvetica', '', 14)
    ->setFontStretching(100)
    ->cell(0, 10, 'Normal width (100%)', newLine: true)
    ->setFontStretching(130)
    ->cell(0, 10, 'Stretched (130%)', newLine: true)
    ->setFontStretching(75)
    ->cell(0, 10, 'Condensed (75%)', newLine: true)
    ->setFontStretching(100);

Измерение текста

getStringWidth()

Возвращает ширину (в пользовательских единицах) строки, отрендеренной текущим шрифтом и размером. Полезно для расчёта компоновки перед отрисовкой.

php
$pdf->setFont('Helvetica', '', 12);
$width = $pdf->getStringWidth('Invoice Total: $1,250.00');

// Использование измеренной ширины для выравнивания ячейки вправо
$pageWidth = $pdf->getPageWidth();
$rightMargin = $pdf->getRightMargin();
$pdf->setX($pageWidth - $rightMargin - $width)
    ->cell($width, 10, 'Invoice Total: $1,250.00');

Режимы рендеринга текста

PDF определяет 8 режимов рендеринга текста через enum TextRenderer. Они управляют тем, заполняется ли текст, обводится, используется как контур отсечения или скрывается.

РежимЗначениеЭффект
Fill0Обычный заполненный текст (по умолчанию)
Stroke1Только контур
FillStroke2Заполненный с контуром
Invisible3Скрытый, но выделяемый/доступный для поиска
FillClip4Заливка, затем добавление в контур отсечения
StrokeClip5Обводка, затем добавление в контур отсечения
FillStrokeClip6Заливка + обводка, затем отсечение
Clip7Только добавление в контур отсечения
php
$pdf->setFont('Helvetica', 'B', 36)
    ->setTextRenderingMode(0)
    ->cell(0, 15, 'Filled text', newLine: true)
    ->setTextRenderingMode(1)
    ->cell(0, 15, 'Outlined text', newLine: true)
    ->setTextRenderingMode(2)
    ->cell(0, 15, 'Fill + Stroke', newLine: true)
    ->setTextRenderingMode(3)
    ->cell(0, 15, 'Invisible (but searchable)', newLine: true)
    ->setTextRenderingMode(0);

Невидимый режим (3) особенно полезен для OCR-наложений — вы размещаете распознанный текст поверх отсканированного изображения, чтобы PDF был доступен для поиска, в то время как изображение остаётся видимым.

Цвет текста

setTextColor()

Устанавливает цвет текста с использованием значений RGB.

php
$pdf->setTextColor(0, 0, 0)          // Чёрный
    ->cell(0, 10, 'Black text', newLine: true)
    ->setTextColor(220, 50, 50)       // Красный
    ->cell(0, 10, 'Red text', newLine: true)
    ->setTextColor(0, 102, 204)       // Синий
    ->cell(0, 10, 'Blue text', newLine: true)
    ->setTextColor(0, 0, 0);          // Сброс на чёрный

При вызове с одним аргументом устанавливается значение оттенка серого (0 = чёрный, 255 = белый).

php
$pdf->setTextColor(128)
    ->cell(0, 10, 'Gray text', newLine: true);

Тень текста

setTextShadow()

Применяет эффект тени под текстом. Тень определяется как ассоциативный массив.

php
$pdf->setFont('Helvetica', 'B', 28)
    ->setTextShadow([
        'enabled'    => true,
        'depth_w'    => 0.4,    // Горизонтальное смещение (мм)
        'depth_h'    => 0.4,    // Вертикальное смещение (мм)
        'color'      => [180, 180, 180],
        'opacity'    => 0.5,
        'blend_mode' => 'Normal',
    ])
    ->cell(0, 15, 'Heading with Shadow', newLine: true)
    ->setTextShadow(['enabled' => false]);

Полный пример

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->addPage()

    // Заголовок — крупный, жирный, синий
    ->setFont('Helvetica', 'B', 24)
    ->setTextColor(0, 51, 102)
    ->cell(0, 14, 'Monthly Report', newLine: true)

    // Подзаголовок — обычный, серый, с дополнительным интервалом
    ->setFont('Helvetica', '', 12)
    ->setTextColor(100, 100, 100)
    ->setFontSpacing(1.0)
    ->cell(0, 10, 'February 2026', newLine: true)
    ->setFontSpacing(0)
    ->ln(5)

    // Основной текст — чёрный, обычный
    ->setFont('Times', '', 11)
    ->setTextColor(0, 0, 0)
    ->multiCell(0, 6, 'Revenue increased 12% compared to the previous quarter. Operating costs remained stable, and net margin improved by 3 percentage points.')
    ->ln(3)

    // Сноска — мелкий, курсив, серый
    ->setFont('Times', 'I', 8)
    ->setTextColor(150, 150, 150)
    ->cell(0, 5, '* All figures are unaudited.')

    ->save('report.pdf');

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