跳轉到

色彩管理

NextPDF 支援完整的 PDF 2.0 色彩系統,包含設備色彩空間(RGB、CMYK、灰階)、設備無關色彩空間(ICCBased、Lab、CalRGB)以及專色(Separation、DeviceN)。SpotColorManager 提供集中化的專色定義與管理。

基本色彩

use NextPDF\Graphics\Color;

// RGB(螢幕用)
$blue = Color::rgb(r: 30, g: 58, b: 138);       // #1E3A8A
$amber = Color::rgb(r: 217, g: 119, b: 6);       // #D97706

// CMYK(印刷用,值範圍 0.0–1.0)
$black = Color::cmyk(c: 0.0, m: 0.0, y: 0.0, k: 1.0);
$red = Color::cmyk(c: 0.0, m: 0.9, y: 0.9, k: 0.0);

// 灰階(值範圍 0.0–1.0,0=黑 1=白)
$gray50 = Color::gray(value: 0.5);

// 十六進位
$color = Color::fromHex('#1E3A8A');

專色(Spot Colors)

use NextPDF\Graphics\SpotColorManager;
use NextPDF\Graphics\SpotColor;

$spotColors = $document->spotColors();

// 定義 PANTONE 專色
$pantone = $spotColors->define(
    name: 'PANTONE 286 C',
    alternateColorSpace: 'CMYK',
    alternateColor: Color::cmyk(c: 1.0, m: 0.72, y: 0.0, k: 0.02),
);

// 使用專色填充
$document->draw()->rectangle(
    rect: Rectangle::fromXY(x: 20.0, y: 30.0, width: 80.0, height: 40.0),
    fill: FillStyle::spotColor(
        spotColor: $pantone,
        tint: 1.0,  // 100% 濃度
    ),
);

ICC 色彩描述檔

use NextPDF\Graphics\IccProfile;

// 嵌入 ICC 描述檔(印刷合規必要)
$icc = IccProfile::fromFile(path: '/path/to/sRGB_IEC61966-2-1.icc');

// 設定文件的輸出意圖
$document->setOutputIntent(
    profile: $icc,
    condition: 'sRGB IEC 61966-2-1',
);

// 使用 ICCBased 色彩空間
$color = Color::iccBased(profile: $icc, values: [30, 58, 138]);

混合模式

use NextPDF\Graphics\BlendMode;

$draw->save();
$draw->setBlendMode(BlendMode::Multiply);

// 以 Multiply 模式繪製(用於疊印效果)
$draw->rectangle(
    rect: Rectangle::fromXY(x: 40.0, y: 40.0, width: 80.0, height: 80.0),
    fill: FillStyle::solidColor([255, 200, 0]),
);

$draw->restore();
混合模式 PDF 名稱 說明
Normal Normal 標準覆蓋
Multiply Multiply 相乘(加深)
Screen Screen 反相相乘(提亮)
Overlay Overlay 疊加
Darken Darken 取較暗色
Lighten Lighten 取較亮色
ColorDodge ColorDodge 加亮
ColorBurn ColorBurn 加深
HardLight HardLight 強光
SoftLight SoftLight 柔光
Difference Difference 差值
Exclusion Exclusion 排除

疊印設定

use NextPDF\Graphics\Overprint;

// 啟用 CMYK 疊印(黑色油墨疊印)
$draw->setOverprint(
    mode: Overprint::FillAndStroke,
    overprintMode: 1,  // OPM=1:非零分量疊印
);

色彩轉換

use NextPDF\Graphics\ColorConverter;

$converter = ColorConverter::create();

// RGB → CMYK(使用預設 ICC 描述檔)
$cmyk = $converter->rgbToCmyk(Color::rgb(r: 30, g: 58, b: 138));

// Lab → CMYK
$cmyk = $converter->labToCmyk(l: 25.0, a: 15.0, b: -45.0);

參見

  • 繪圖引擎 — FillStyle 與 StrokeStyle 使用色彩
  • 圖片 — CMYK 圖片嵌入
  • PDF/A — 色彩合規要求