Skip to content

颜色

TCPDF-Next 通过 HasColors trait、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--255DeviceRGB
Color::cmyk(c, m, y, k)每个通道 0--100DeviceCMYK
Color::gray(value)0--255DeviceGray
Color::spot(name, c, m, y, k)名称 + CMYK 后备值Separation

颜色空间

颜色空间使用场景
DeviceRGB屏幕导向的输出(网页、演示文稿)
DeviceCMYK印刷导向的输出(商业印刷)
DeviceGray灰阶文档
Separation特别色 / Pantone 色,用于品牌颜色的精准重现

CMYK 数值会直接写入 PDF 流。如需颜色管理流程,可通过 setColorProfile() 嵌入 ICC 配置文件。

透明度

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);                // 重置为完全不透明

在透明区段结束后,务必将不透明度重置为 1.0,以避免对后续内容产生非预期的效果。

混合模式

TCPDF-Next 支持 PDF 规范中全部 16 种混合模式:

模式效果
Normal来源覆盖目标(默认)
Multiply加深 — 通道值相乘
Screen变亮 — 反向相乘
Overlay结合 Multiply 与 Screen
Darken / Lighten逐通道取较暗 / 较亮的值
ColorDodge / ColorBurn加亮 / 加深目标
HardLight / SoftLight强烈 / 柔和的光线效果
Difference / Exclusion通道差值(高 / 低对比)
Hue / Saturation取来源的色相或饱和度,保留目标的亮度
Color / Luminosity取来源的颜色或亮度

渐变

四种渐变类型会以原生 PDF 着色对象(shading object)渲染:

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);       // Coons patch mesh
$pdf->tensorProductPatchMesh(10, 10, 100, 100, $colors, $coords); // Tensor-product
  • 线性渐变 — 沿着方向向量的双色渐变。
  • 径向渐变 — 从中心点向外扩展的双色渐变。
  • Coons patch mesh — 通过贝塞尔控制点定义的复杂多色填充。
  • Tensor-product patch mesh — Coons 的扩展版本,增加了内部控制点。

完整示例

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);                // 重置不透明度

实用提示

  • 屏幕显示的 PDF 使用 DeviceRGB,商业印刷用 DeviceCMYK。
  • 特别色需要 SpotColorManager — 它会在首次使用时惰性初始化。
  • 透明区段结束后,务必将 alpha 重置为 1.0
  • 渐变坐标使用当前的用户单位系统(默认:mm)。

以 LGPL-3.0-or-later 许可证发布。