Producir color listo para imprenta: CMYK y color directo
En resumen
Sección titulada «En resumen»El color de pantalla es RGB. El color de imprenta no lo es. Cuando una prensa o un RIP de pruebas consume tu PDF, quiere tintas de proceso (CMYK), la tinta con nombre ocasional (un color directo o Separation) y una declaración de la condición de producción que debe asumir. Esta receta muestra las tres vías de emisión de color que NextPDF te ofrece para ese público:
- Rellenos y trazos en CMYK de dispositivo:
setFillColorCmyk()/setDrawColorCmyk(). - Tintas directas/Separation a un tinte:
registerSpotColor()y luegosetSpotFillColor()/setSpotDrawColor(). - Una intención de salida ICC que declara una condición de trabajo/salida RGB para todo el documento:
Config::withOutputColorProfile(). Los perfiles incluidos son espacios de trabajo RGB; esto no declara una condición de imprenta CMYK / PDF/X real.
Nota de alcance por adelantado: esto es emisión de color. NextPDF escribe los números CMYK, el espacio Separation y la declaración de intención de salida que pidas. No ejecuta una transformación de gestión de color: no volverá a representar tu material gráfico RGB a una gama CMYK de destino, ni lo simulará en pantalla, ni garantizará una coincidencia visual. Suministra colores ya especificados para tu condición.
Instalación
Sección titulada «Instalación»composer require nextpdf/core:^3No se requiere ninguna extensión opcional. La API de color ha sido estable desde la 1.2.0 y se ejecuta en la matriz de backport 8.1–8.4.
Rellenos y trazos en CMYK de dispositivo
Sección titulada «Rellenos y trazos en CMYK de dispositivo»CMYK es el predeterminado para la impresión de proceso offset y digital: cuatro canales, cian / magenta / amarillo / negro (la «clave»). Establece el color de relleno o de trazo y luego dibuja como de costumbre.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
$doc = Document::createStandalone();$doc->addPage();
// Components are percentages, 0–100 (cyan, magenta, yellow, key).$doc->setFillColorCmyk(0, 95, 100, 0); // a process "red"$doc->rect(20, 30, 60, 40, 'F');
$doc->setDrawColorCmyk(100, 0, 0, 0); // pure cyan rule$doc->setLineWidth(1.0);$doc->rect(20, 30, 60, 40, 'S');
$doc->setTextColorCmyk(0, 0, 0, 100); // rich-free 100% K text$doc->setFont('helvetica', '', 12);$doc->text(20, 85, 'Process CMYK');
$doc->save(getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: __DIR__ . '/cmyk.pdf');Cada llamada emite un operador de color DeviceCMYK en el flujo de contenido: k para el color de no trazado (relleno/texto) y K para el color de trazado, con los cuatro componentes escalados al rango 0.0–1.0 que PDF usa internamente. ISO 32000-2 §8.6.8 (operadores de color, tabla 73) define k y K como los operadores de establecimiento de color DeviceCMYK; §8.6.4.4 define el propio espacio de color DeviceCMYK.
El objeto de valor subyacente es NextPDF\Graphics\Color. Si construyes colores directamente, Color::cmyk($c, $m, $y, $k) toma los mismos porcentajes 0–100 y es lo que llama cada método de documento …Cmyk.
Tintas directas/Separation a un tinte
Sección titulada «Tintas directas/Separation a un tinte»Un color directo es una única tinta con nombre — un Pantone, un HKS, un barniz, una plancha de «corte» troquelado — que la prensa carga como su propia plancha en lugar de construirla a partir de tintas de proceso. En PDF es un espacio de color Separation: un nombre de colorante más un espacio alternativo (aquí DeviceCMYK) y una transformación de tinte que asigna un valor de tinte en [0, 1] al alternativo, de modo que los representadores que no admiten color directo siguen mostrando una aproximación.
Registra la tinta una vez con su reserva CMYK, luego establécela como color de relleno o de trazo a un porcentaje de tinte:
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
$doc = Document::createStandalone();$doc->addPage();
// Register the ink and its CMYK fallback (percentages, 0–100).$doc->registerSpotColor('PANTONE 485 C', 0, 95, 100, 0);
// Full-strength fill.$doc->setSpotFillColor('PANTONE 485 C'); // tint defaults to 100$doc->rect(20, 30, 50, 30, 'F');
// 40% tint of the same ink.$doc->setSpotFillColor('PANTONE 485 C', 40);$doc->rect(80, 30, 50, 30, 'F');
// Same ink as a stroke at 75%.$doc->setSpotDrawColor('PANTONE 485 C', 75);$doc->setLineWidth(1.5);$doc->line(20, 75, 130, 75);
$doc->save(getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: __DIR__ . '/spot.pdf');Debes hacer registerSpotColor() antes de seleccionarla; un nombre no registrado lanza una PageLayoutException. El registro escribe el recurso Separation y la transformación de tinte; setSpotFillColor() / setSpotDrawColor() emiten entonces /CS_<token> cs <tint> scn para un relleno (o la forma de trazado en mayúsculas /CS_<token> CS <tint> SCN) contra ese recurso Separation registrado. Aquí entran en juego dos nombres distintos, y el motor los maneja por separado:
- La CLAVE del recurso — el token
/CS_…al que hace referencia el operador del flujo de contenido y bajo el que se indexa el diccionario/Resources /ColorSpacede la página — se deriva del nombre de la tinta reemplazando cada carácter que no sea de palabra por_, de modo que'PANTONE 485 C'selecciona el recurso/CS_PANTONE_485_C. (Para nombres de tinta que contienen un_literal, un guion u otra puntuación, se añade un sufijo determinista corto para mantener la clave libre de colisiones, de modo que dos nombres casi idénticos nunca comparten un espacio de color). - El propio nombre de colorante Separation — el nombre que lleva la matriz de espacio de color
[/Separation /<name> …]— se mantiene tal cual y lo codifica el escritor como un objeto de nombre PDF, escapando en hexadecimal (#XX) cualquier delimitador o byte no imprimible. No se aplana al tokenCS_…; la clave del recurso y el nombre del colorante se calculan de forma independiente.
El argumento de tinte que pasas es un porcentaje, de 0 (papel) a 100 (tinta plena), pero el operando escrito en el flujo de contenido es el valor normalizado 0.0–1.0, de modo que un tinte de 40 emite /CS_PANTONE_485_C cs 0.400000 scn. ISO 32000-2 §8.6.6.4 cubre los espacios de color Separation y su transformación de tinte.
La transformación de tinte predeterminada es una interpolación lineal de [0 0 0 0] (papel a tinte 0) a la reserva CMYK registrada (tinta plena a tinte 1). Eso es correcto para tintas directas ordinarias; una tinta no lineal o un perfil medido necesita una transformación personalizada, lo cual queda fuera del alcance de esta receta.
Declarar una intención de salida ICC
Sección titulada «Declarar una intención de salida ICC»Un PDF puede llevar una declaración a nivel de documento de la condición de color para la que se prepararon sus colores: una intención de salida: un diccionario que nombra la condición de producción, con el perfil ICC de destino incrustado como un flujo ICCBased. En un flujo de trabajo real de imprenta/PDF-X esta es una condición de prensa CMYK (un perfil FOGRA o GRACoL estucado, por ejemplo). Los perfiles que NextPDF incluye, sin embargo, son espacios de trabajo RGB, de modo que lo que declara Config::withOutputColorProfile() es una condición de salida de visualización/trabajo RGB, no un destino CMYK. Consulta la nota debajo del ejemplo antes de confiar en ella para salida de imprenta.
NextPDF lo expone a través del Config del documento. Elige uno de los perfiles de espacio de trabajo incluidos, construye la configuración y crea el documento a partir de ella:
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Config;use NextPDF\Core\Document;use NextPDF\Core\OutputColorProfile;
// Declare an explicit, embedded output intent for the document.$config = (new Config()) ->withOutputColorProfile(OutputColorProfile::Srgb);
$doc = Document::createStandalone($config);$doc->addPage();
$doc->setFillColorCmyk(0, 95, 100, 0);$doc->rect(20, 30, 60, 40, 'F');
$doc->save(getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: __DIR__ . '/with-intent.pdf');OutputColorProfile es una enumeración de espacios de trabajo para los que el motor incluye un perfil. Todos los casos respaldados por un perfil son espacios de trabajo RGB de tres componentes; DeviceRGB es el centinela predeterminado y no emite ninguna intención de salida. No hay perfil de destino CMYK incluido:
DeviceRGB— el predeterminado. No se emite ninguna intención de salida: no se declara ninguna condición de salida a nivel de PDF, y la canalización PDF/A (si está activa) conserva el control exclusivo de la matriz/OutputIntents. Usa esto cuando no quieras declarar ninguna. (El contenido PDFDeviceRGBsin intención de salida depende del dispositivo: no es un sRGB declarado).Srgb— emite un diccionario de intención de salida que incrusta elsRGB.iccincluido, con el identificador de condición estándarsRGB IEC61966-2.1.DisplayP3,Rec2020,A98RGB,ProphotoRGB— espacios de trabajo RGB de gama amplia, cada uno incrustando su perfil ICC incluido bajo un identificador de condición personalizado (NextPDF wide-gamut …).
Cualquier caso distinto de DeviceRGB hace que el escritor emita un diccionario de intención de salida que hace referencia al flujo ICCBased incrustado (con su recuento de componentes /N 3). ISO 32000-2 §14.11.5 define el diccionario de intención de salida; §8.6.5.5 define el espacio de color ICCBased que lleva el perfil incrustado. En el motor actual este diccionario se escribe con el subtipo de intención de salida PDF/X /GTS_PDFX independientemente de qué perfil incluido elijas (la ruta de archivado PDF/A usa su propio subtipo /GTS_PDFA1 y se emite por separado).
La advertencia importante: como todos los perfiles incluidos son RGB, esto declara el espacio de trabajo RGB del documento y su intención de visualización; no es un perfil de destino CMYK y no transforma nada a CMYK. El motor no te permite suministrar un perfil ICC de destino CMYK personalizado a través de withOutputColorProfile(). Una intención de salida CMYK de imprenta/PDF-X real requiere un flujo de trabajo que incruste tu propio perfil ICC CMYK como destino; para una intención de salida de archivado conectada en la misma matriz /OutputIntents, consulta Salida PDF/A-4.
Cuándo recurrir a cada uno
Sección titulada «Cuándo recurrir a cada uno»- CMYK de dispositivo — el predeterminado para cualquier material gráfico destinado a una prensa de proceso. Especifica tus colores en CMYK desde el principio para que no haya conjeturas RGB→CMYK aguas abajo.
- Color directo/Separation — colores de marca que deben acertar una tinta exacta, además de planchas que no son de proceso (barniz, blanco, metálico, troquelado, lámina). Registra una vez, pinta a cualquier tinte.
- Intención de salida — establécela cuando quieras que el archivo sea autodescriptivo respecto a su condición de trabajo/salida RGB, o cuando un consumidor (un visor, un RIP con gestión de color, un validador) espere una condición de salida declarada. Los perfiles incluidos declaran únicamente una condición de trabajo/salida RGB; no declaran una condición de imprenta CMYK / PDF/X real.
Casos límite y trampas
Sección titulada «Casos límite y trampas»- Los componentes CMYK son porcentajes (0–100), no 0–1. Los métodos de documento
…CmykyColor::cmyk()toman cada canal como un porcentaje0–100y dividen por 100 al escribir el operador; el operando del flujo de contenido es el valor normalizado0.0–1.0. Pasa100para tinta plena, no1.0(que el motor trataría como 1 % de tinta). - Registra antes de seleccionar un color directo.
setSpotFillColor()/setSpotDrawColor()lanzan si el nombre nunca se registró. Los nombres se cotejan exactamente, incluidas mayúsculas/minúsculas y espacios. - El estado de color persiste. Un color CMYK o directo permanece en vigor hasta que lo cambias. Restablécelo antes de un bloque no relacionado.
- La reserva CMYK es una aproximación. La transformación de tinte de Separation existe para que los representadores que no admiten color directo puedan mostrar algo; no es la salida de imprenta. La tinta real es lo que produce la plancha con nombre.
- Una intención de salida es una declaración, no una conversión. Declarar
OutputColorProfile::Srgbno transforma tus colores a sRGB; declara la condición prevista. La precisión del color es tu responsabilidad aguas arriba.
Rendimiento
Sección titulada «Rendimiento»Cada selección de color es un único operador del flujo de contenido; un color directo también escribe un recurso Separation por cada tinta registrada. Un perfil de intención de salida incrustado se escribe una vez por documento. Todas las vías se mantienen holgadamente dentro del presupuesto de 2000 ms / 64 MB.
Notas de seguridad
Sección titulada «Notas de seguridad»Esta receta emite únicamente los colores y el perfil que especifica tu código. No analiza ninguna entrada no confiable y no realiza ningún acceso de red. Si los nombres de colorante o los componentes CMYK provienen de datos externos, valídalos: acota los componentes a 0–100 y rechaza los caracteres de control en los nombres de color directo (un byte NUL en un nombre Separation lo rechaza el motor).
Conformidad
Sección titulada «Conformidad»| Afirmación | Especificación | Cláusula |
|---|---|---|
k y K son los operadores de color que establecen el color DeviceCMYK de no trazado / trazado. | ISO 32000-2 | §8.6.8 |
| DeviceCMYK es el espacio de color de proceso sustractivo de cuatro componentes. | ISO 32000-2 | §8.6.4.4 |
| Un espacio de color Separation nombra un colorante cuyo tinte se asigna a un espacio alternativo mediante una transformación de tinte. | ISO 32000-2 | §8.6.6.4 |
Un espacio de color ICCBased incrusta un flujo de perfil ICC con un recuento de componentes /N. | ISO 32000-2 | §8.6.5.5 |
Una intención de salida declara la condición de producción de destino; GTS_PDFX nombra el subtipo de imprenta. | ISO 32000-2 | §14.11.5 |
Perfil de reproducibilidad — structural. La emisión de color no tiene entropía propia, pero cada documento guardado lleva un /ID de tráiler y átomos de fecha, y un flujo ICC incrustado es estable a nivel de bytes solo para un perfil incluido fijo. La afirmación respaldada es la igualdad estructural tras la normalización con qpdf. Esta receta describe cómo NextPDF produce la estructura; no afirma una conformidad general con ISO 32000-2.
Contexto comercial
Sección titulada «Contexto comercial»No aplicable. El CMYK de dispositivo, el color directo/Separation y la declaración de intención de salida son capacidades del Core sin restricción Premium. El Core admite la declaración de intención de salida RGB incluida que se muestra aquí; esta receta no afirma flujos de trabajo personalizados de ICC con condición de imprenta CMYK.