Skip to content

Cores

O TCPDF-Next fornece gerenciamento completo de cores através do trait HasColors, do value object Graphics\Color e da abstração Graphics\ColorSpace. As cores se aplicam independentemente a traços, preenchimentos e texto.

Definindo Cores

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->addPage()
    ->setDrawColor(255, 0, 0)      // Traço vermelho
    ->setFillColor(0, 0, 255)      // Preenchimento azul
    ->setTextColor(51, 51, 51);    // Texto cinza escuro

Assinaturas

php
setDrawColor(int $r, int $g = -1, int $b = -1): static   // Cor do traço
setFillColor(int $r, int $g = -1, int $b = -1): static   // Cor de preenchimento
setTextColor(int $r, int $g = -1, int $b = -1): static   // Cor do texto

Quando apenas $r é fornecido ($g e $b padrão -1), o valor é tratado como escala de cinza (0 = preto, 255 = branco).

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);
Método FactoryParâmetrosEspaço de Cor
Color::rgb(r, g, b)0--255 por canalDeviceRGB
Color::cmyk(c, m, y, k)0--100 por canalDeviceCMYK
Color::gray(value)0--255DeviceGray
Color::spot(name, c, m, y, k)Nome + fallback CMYKSeparation

Espaços de Cor

Espaço de CorUso
DeviceRGBSaída orientada a tela (web, apresentações)
DeviceCMYKSaída orientada a impressão (impressão comercial)
DeviceGrayDocumentos em escala de cinza
SeparationCores spot/Pantone para impressão com precisão de marca

Valores CMYK são escritos diretamente no stream PDF. Para fluxos de trabalho com gerenciamento de cores, incorpore um perfil ICC via setColorProfile().

Transparência

php
setAlpha(float $opacity = 1.0, string $blendMode = 'Normal'): static
php
$pdf->setAlpha(0.5, 'Multiply')    // 50% opacidade, mistura Multiply
    ->rect(10, 10, 50, 30, 'F')
    ->setAlpha(1.0);                // Resetar para totalmente opaco

Sempre resete a opacidade após seções transparentes para evitar efeitos indesejados no conteúdo subsequente.

Modos de Mistura

Todos os 16 modos de mistura PDF são suportados:

ModoEfeito
NormalOrigem sobre destino (padrão)
MultiplyEscurece — multiplica valores dos canais
ScreenClareia — multiplicação inversa
OverlayCombina Multiply e Screen
Darken / LightenMantém valor mais escuro / mais claro por canal
ColorDodge / ColorBurnClareia / escurece o destino
HardLight / SoftLightEfeito de luz forte / sutil
Difference / ExclusionDiferença de canal (alto / baixo contraste)
Hue / SaturationMatiz ou saturação da origem, luminosidade do destino
Color / LuminosityCor ou luminosidade da origem

Gradientes

Quatro tipos de gradiente são renderizados como objetos de sombreamento nativos do PDF:

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);       // Malha de patch Coons
$pdf->tensorProductPatchMesh(10, 10, 100, 100, $colors, $coords); // Produto tensorial
  • Linear — gradiente de duas cores ao longo de um vetor de direção.
  • Radial — gradiente de duas cores expandindo de um ponto central.
  • Malha de patch Coons — preenchimentos complexos multi-cores definidos por pontos de controle Bezier.
  • Malha de produto tensorial — extensão Coons com pontos de controle interiores adicionais.

Exemplo Completo

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->addPage()
    ->setDrawColor(255, 0, 0)       // Traço vermelho
    ->setFillColor(0, 0, 255)       // Preenchimento azul
    ->rect(10, 10, 50, 30, 'DF')    // Desenhar + Preencher
    ->setAlpha(0.5, 'Multiply')     // 50% opacidade com mistura Multiply
    ->setFillColor(255, 255, 0)     // Amarelo
    ->rect(30, 20, 50, 30, 'F')     // Retângulo semi-transparente sobreposto
    ->setAlpha(1.0);                // Resetar opacidade

Dicas

  • Use DeviceRGB para PDFs em tela e DeviceCMYK para impressão comercial.
  • Cores spot requerem SpotColorManager — é inicializado de forma lazy no primeiro uso.
  • Sempre resete alpha para 1.0 após seções transparentes.
  • Coordenadas de gradiente usam o sistema de unidades do usuário atual (padrão: mm).

Distribuído sob a licença LGPL-3.0-or-later.