Skip to content

Warna

TCPDF-Next menyediakan manajemen warna penuh melalui trait HasColors, value object Graphics\Color, dan abstraksi Graphics\ColorSpace. Warna berlaku secara independen untuk stroke, fill, dan teks.

Mengatur Warna

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->addPage()
    ->setDrawColor(255, 0, 0)      // Stroke merah
    ->setFillColor(0, 0, 255)      // Fill biru
    ->setTextColor(51, 51, 51);    // Teks abu-abu gelap

Signature

php
setDrawColor(int $r, int $g = -1, int $b = -1): static   // Warna stroke
setFillColor(int $r, int $g = -1, int $b = -1): static   // Warna fill
setTextColor(int $r, int $g = -1, int $b = -1): static   // Warna teks

Saat hanya $r yang diberikan ($g dan $b default -1), nilai diperlakukan sebagai grayscale (0 = hitam, 255 = putih).

Value Object 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);
Factory MethodParameterColor Space
Color::rgb(r, g, b)0--255 per channelDeviceRGB
Color::cmyk(c, m, y, k)0--100 per channelDeviceCMYK
Color::gray(value)0--255DeviceGray
Color::spot(name, c, m, y, k)Nama + fallback CMYKSeparation

Color Space

Color SpacePenggunaan
DeviceRGBOutput berorientasi layar (web, presentasi)
DeviceCMYKOutput berorientasi cetak (percetakan komersial)
DeviceGrayDokumen grayscale
SeparationWarna spot/Pantone untuk pencetakan akurat brand

Nilai CMYK ditulis langsung ke PDF stream. Untuk workflow color-managed, embed profil ICC melalui setColorProfile().

Transparansi

php
setAlpha(float $opacity = 1.0, string $blendMode = 'Normal'): static
php
$pdf->setAlpha(0.5, 'Multiply')    // Opasitas 50%, blend Multiply
    ->rect(10, 10, 50, 30, 'F')
    ->setAlpha(1.0);                // Reset ke sepenuhnya opaque

Selalu reset opasitas setelah bagian transparan untuk mencegah efek yang tidak diinginkan pada konten selanjutnya.

Blend Mode

Semua 16 blend mode PDF didukung:

ModeEfek
NormalSource over destination (default)
MultiplyMenggelapkan — mengalikan nilai channel
ScreenMencerahkan — inverse multiply
OverlayMenggabungkan Multiply dan Screen
Darken / LightenMenyimpan nilai lebih gelap / lebih terang per channel
ColorDodge / ColorBurnMencerahkan / menggelapkan destination
HardLight / SoftLightEfek cahaya kuat / halus
Difference / ExclusionPerbedaan channel (kontras tinggi / rendah)
Hue / SaturationHue atau saturasi source, luminosity destination
Color / LuminosityWarna atau luminosity source

Gradient

Empat tipe gradient di-render sebagai objek shading PDF native:

php
$pdf->linearGradient(10, 10, 100, 50, '#ff0000', '#0000ff', [0, 0, 1, 1]);   // Linear
$pdf->radialGradient(60, 60, 80, 80, '#ffffff', '#000000');                    // Radial
$pdf->coonsPatchMesh(10, 10, 100, 100, $colors, $coords);       // Coons patch mesh
$pdf->tensorProductPatchMesh(10, 10, 100, 100, $colors, $coords); // Tensor-product
  • Linear — gradient dua warna sepanjang vektor arah.
  • Radial — gradient dua warna yang meluas dari titik pusat.
  • Coons patch mesh — fill multi-warna kompleks didefinisikan oleh titik kontrol Bezier.
  • Tensor-product patch mesh — ekstensi Coons dengan titik kontrol interior tambahan.

Contoh Lengkap

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->addPage()
    ->setDrawColor(255, 0, 0)       // Stroke merah
    ->setFillColor(0, 0, 255)       // Fill biru
    ->rect(10, 10, 50, 30, 'DF')    // Draw + Fill
    ->setAlpha(0.5, 'Multiply')     // Opasitas 50% dengan blend Multiply
    ->setFillColor(255, 255, 0)     // Kuning
    ->rect(30, 20, 50, 30, 'F')     // Rect semi-transparan bertumpang tindih
    ->setAlpha(1.0);                // Reset opasitas

Tips

  • Gunakan DeviceRGB untuk PDF di layar dan DeviceCMYK untuk cetak komersial.
  • Warna spot memerlukan SpotColorManager — diinisialisasi secara lazy pada penggunaan pertama.
  • Selalu reset alpha ke 1.0 setelah bagian transparan.
  • Koordinat gradient menggunakan sistem unit pengguna saat ini (default: mm).

Didistribusikan di bawah lisensi LGPL-3.0-or-later.