色彩管理¶
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);