Цвета
TCPDF-Next обеспечивает полное управление цветом через trait HasColors, объект значений Graphics\Color и абстракцию Graphics\ColorSpace. Цвета применяются независимо к обводкам, заливкам и тексту.
Установка цветов
php
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->addPage()
->setDrawColor(255, 0, 0) // Красная обводка
->setFillColor(0, 0, 255) // Синяя заливка
->setTextColor(51, 51, 51); // Тёмно-серый текстСигнатуры
php
setDrawColor(int $r, int $g = -1, int $b = -1): static // Цвет обводки
setFillColor(int $r, int $g = -1, int $b = -1): static // Цвет заливки
setTextColor(int $r, int $g = -1, int $b = -1): static // Цвет текстаКогда указан только $r ($g и $b по умолчанию -1), значение интерпретируется как оттенок серого (0 = чёрный, 255 = белый).
Объект значений Color
php
use Yeeefang\TcpdfNext\Graphics\Color;
$red = Color::rgb(255, 0, 0);
$cyan = Color::cmyk(100, 0, 0, 0);
$gray = Color::gray(128);
$spot = Color::spot('Pantone 151 C', 0, 60, 100, 0);| Фабричный метод | Параметры | Цветовое пространство |
|---|---|---|
Color::rgb(r, g, b) | 0--255 на канал | DeviceRGB |
Color::cmyk(c, m, y, k) | 0--100 на канал | DeviceCMYK |
Color::gray(value) | 0--255 | DeviceGray |
Color::spot(name, c, m, y, k) | Имя + CMYK-запасной вариант | Separation |
Цветовые пространства
| Цветовое пространство | Применение |
|---|---|
| DeviceRGB | Экранный вывод (веб, презентации) |
| DeviceCMYK | Печатный вывод (коммерческая печать) |
| DeviceGray | Чёрно-белые документы |
| Separation | Плашечные/Pantone-цвета для точного воспроизведения бренда |
Значения CMYK записываются напрямую в поток PDF. Для управления цветом со встроенными профилями ICC используйте setColorProfile().
Прозрачность
php
setAlpha(float $opacity = 1.0, string $blendMode = 'Normal'): staticphp
$pdf->setAlpha(0.5, 'Multiply') // 50% непрозрачность, смешивание Multiply
->rect(10, 10, 50, 30, 'F')
->setAlpha(1.0); // Сброс на полную непрозрачностьВсегда сбрасывайте прозрачность после прозрачных секций, чтобы предотвратить непреднамеренное влияние на последующий контент.
Режимы смешивания
Поддерживаются все 16 режимов смешивания PDF:
| Режим | Эффект |
|---|---|
Normal | Источник поверх назначения (по умолчанию) |
Multiply | Затемняет — умножает значения каналов |
Screen | Осветляет — обратное умножение |
Overlay | Комбинирует Multiply и Screen |
Darken / Lighten | Сохраняет более тёмное / более светлое значение каждого канала |
ColorDodge / ColorBurn | Осветляет / затемняет назначение |
HardLight / SoftLight | Сильный / мягкий световой эффект |
Difference / Exclusion | Разность каналов (высокий / низкий контраст) |
Hue / Saturation | Тон или насыщенность источника, яркость назначения |
Color / Luminosity | Цвет или яркость источника |
Градиенты
Четыре типа градиентов рендерятся как нативные объекты заливки PDF:
php
$pdf->linearGradient(10, 10, 100, 50, '#ff0000', '#0000ff', [0, 0, 1, 1]); // Линейный
$pdf->radialGradient(60, 60, 80, 80, '#ffffff', '#000000'); // Радиальный
$pdf->coonsPatchMesh(10, 10, 100, 100, $colors, $coords); // Сетка Кунса
$pdf->tensorProductPatchMesh(10, 10, 100, 100, $colors, $coords); // Тензорная сетка- Линейный — двухцветный градиент вдоль вектора направления.
- Радиальный — двухцветный градиент, расширяющийся из центральной точки.
- Сетка Кунса — сложные многоцветные заливки, определяемые контрольными точками Безье.
- Тензорная сетка — расширение Кунса с дополнительными внутренними контрольными точками.
Полный пример
php
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->addPage()
->setDrawColor(255, 0, 0) // Красная обводка
->setFillColor(0, 0, 255) // Синяя заливка
->rect(10, 10, 50, 30, 'DF') // Обводка + Заливка
->setAlpha(0.5, 'Multiply') // 50% непрозрачность со смешиванием Multiply
->setFillColor(255, 255, 0) // Жёлтый
->rect(30, 20, 50, 30, 'F') // Перекрывающийся полупрозрачный прямоугольник
->setAlpha(1.0); // Сброс непрозрачностиСоветы
- Используйте DeviceRGB для экранных PDF и DeviceCMYK для коммерческой печати.
- Плашечные цвета требуют
SpotColorManager— он инициализируется лениво при первом использовании. - Всегда сбрасывайте alpha на
1.0после прозрачных секций. - Координаты градиентов используют текущую систему единиц (по умолчанию: мм).