Skip to content

Цвета

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--255DeviceGray
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'): static
php
$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 после прозрачных секций.
  • Координаты градиентов используют текущую систему единиц (по умолчанию: мм).

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