Drukklare CMYK- en spotkleur produceren
In één oogopslag
Sectie met titel “In één oogopslag”Schermkleur is RGB. Drukkleur is dat niet. Wanneer een pers of een proofing-RIP je PDF verwerkt, wil die proces-inkten (CMYK), af en toe een benoemde inkt (een spot- of Separation-kleur) en een declaratie van de productiecondition die hij moet aannemen. Dit recipe toont de drie kleuruitzendpaden die NextPDF je voor dat publiek geeft:
- Device CMYK-vullingen en -strokes —
setFillColorCmyk()/setDrawColorCmyk(). - Spot- / Separation-inkten op een tint —
registerSpotColor()gevolgd doorsetSpotFillColor()/setSpotDrawColor(). - Een ICC-output-intent die een RGB-werk-/uitvoercondition voor het hele document declareert —
Config::withOutputColorProfile(). De meegeleverde profielen zijn RGB-werkruimten; dit declareert geen echte CMYK-pers- / PDF/X-drukcondition.
Een scope-kanttekening vooraf: dit is kleuruitzending. NextPDF schrijft de CMYK-getallen, de Separation-ruimte en de output-intent-declaratie die je vraagt. Het draait geen kleurbeheertransformatie — het zal je RGB-artwork niet opnieuw renderen naar een doel-CMYK-gamut, het niet soft-proofen of een visuele match garanderen. Lever kleuren aan die al voor je condition zijn gespecificeerd.
Installeren
Sectie met titel “Installeren”composer require nextpdf/core:^3Er is geen optionele extensie vereist. De kleur-API is stabiel sinds 1.2.0 en draait op de 8.1–8.4-backportmatrix.
Device CMYK-vullingen en -strokes
Sectie met titel “Device CMYK-vullingen en -strokes”CMYK is de standaard voor offset- en digitale procesdruk: vier kanalen, cyaan / magenta / geel / zwart (de “key”). Stel de vul- of strokekleur in en teken vervolgens zoals gebruikelijk.
<?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');Elke aanroep zendt een DeviceCMYK-kleuroperator in de content stream uit: k voor de niet-strokende (vul/tekst) kleur en K voor de strokende kleur, met de vier componenten geschaald naar het 0.0–1.0-bereik dat PDF intern gebruikt. ISO 32000-2 §8.6.8 (Colour Operators, Table 73) definieert k en K als de DeviceCMYK-kleurinstellingsoperatoren; §8.6.4.4 definieert de DeviceCMYK-kleurruimte zelf.
Het onderliggende waardeobject is NextPDF\Graphics\Color. Als je kleuren direct bouwt, neemt Color::cmyk($c, $m, $y, $k) dezelfde 0–100-percentages en is het wat elke …Cmyk-documentmethode aanroept.
Spot- / Separation-inkten op een tint
Sectie met titel “Spot- / Separation-inkten op een tint”Een spotkleur is één benoemde inkt — een Pantone, een HKS, een vernis, een uitstans-”cut”-plaat — die de pers als eigen plaat laadt in plaats van uit proces-inkten op te bouwen. In PDF is het een Separation-kleurruimte: een kleurmiddelnaam plus een alternatieve ruimte (hier DeviceCMYK) en een tint-transform die een tintwaarde in [0, 1] op de alternatieve ruimte afbeeldt, zodat niet-spot-renderers toch een benadering tonen.
Registreer de inkt eenmaal met zijn CMYK-fallback, en stel die dan in als vul- of strokekleur op een tintpercentage:
<?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');Je moet registerSpotColor() aanroepen voordat je het selecteert; een niet-geregistreerde naam werpt een PageLayoutException op. Registratie schrijft de Separation-resource en tint-transform; setSpotFillColor() / setSpotDrawColor() zenden vervolgens /CS_<token> cs <tint> scn uit voor een vulling (of de strokende vorm in hoofdletters /CS_<token> CS <tint> SCN) tegen die geregistreerde Separation-resource. Hier spelen twee verschillende namen een rol, en de engine behandelt ze afzonderlijk:
- De resource-KEY — het
/CS_…-token waarnaar de content-stream-operator verwijst en waaronder de/Resources /ColorSpace-dictionary van de pagina is gesleuteld — wordt afgeleid van de inktnaam door elk niet-woordteken te vervangen door_, zodat'PANTONE 485 C'de resource/CS_PANTONE_485_Cselecteert. (Voor inktnamen die een letterlijke_, een koppelteken of andere interpunctie bevatten, wordt een korte deterministische suffix toegevoegd om de key botsingvrij te houden, zodat twee vrijwel identieke namen nooit één kleurruimte delen.) - De Separation-kleurmiddelnaam zelf — de naam die binnen de
[/Separation /<name> …]-kleurruimte-array wordt gedragen — wordt as-is behouden en door de writer gecodeerd als een PDF-naamobject, waarbij elke delimiter of niet-afdrukbare byte hex-escaped wordt (#XX). Het wordt niet afgevlakt naar hetCS_…-token; de resource-key en de kleurmiddelnaam worden onafhankelijk berekend.
Het tintargument dat je doorgeeft is een percentage, 0 (papier) tot 100 (volle inkt), maar de operand die in de content stream wordt geschreven is de genormaliseerde 0.0–1.0-waarde, dus een 40-tint zendt /CS_PANTONE_485_C cs 0.400000 scn uit. ISO 32000-2 §8.6.6.4 behandelt Separation-kleurruimten en hun tint-transform.
De standaard tint-transform is een lineaire interpolatie van [0 0 0 0] (papier op tint 0) naar de geregistreerde CMYK-fallback (volle inkt op tint 1). Dat is correct voor gewone spot-inkten; een niet-lineaire inkt of een gemeten profiel vereist een aangepaste transform, wat buiten dit recipe valt.
Een ICC-output-intent declareren
Sectie met titel “Een ICC-output-intent declareren”PDF kan een document-niveau-declaratie dragen van de kleurcondition waarvoor zijn kleuren zijn voorbereid — een output-intent: een dictionary die de productiecondition benoemt, met het doel-ICC-profiel ingesloten als een ICCBased-stream. In een echte druk-/PDF-X-workflow is dit een CMYK-perscondition (een coated FOGRA- of GRACoL-profiel, bijvoorbeeld). De profielen die NextPDF meelevert zijn echter RGB-werkruimten — dus wat Config::withOutputColorProfile() declareert is een RGB-bekijk- / werkruimte-uitvoercondition, geen CMYK-doel. Zie de notitie onder het voorbeeld voordat je erop vertrouwt voor drukuitvoer.
NextPDF stelt dit beschikbaar via de document-Config. Kies een van de meegeleverde werkruimteprofielen, bouw de config en maak het document daaruit:
<?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 is een enum van werkruimten waarvoor de engine een profiel meelevert. Alle profiel-ondersteunde cases zijn drie-componenten RGB-werkruimten; DeviceRGB is de standaard sentinel en zendt geen output-intent uit. Er is geen meegeleverd CMYK-doelprofiel:
DeviceRGB— de standaard. Er wordt geen output-intent uitgezonden: er wordt geen PDF-niveau-uitvoercondition gedeclareerd, en de PDF/A-pijplijn (indien actief) behoudt exclusieve controle over de/OutputIntents-array. Gebruik dit wanneer je er geen wilt declareren. (PDFDeviceRGB-inhoud zonder output-intent is apparaatafhankelijk — het is geen gedeclareerde sRGB.)Srgb— zendt een output-intent-dictionary uit die de meegeleverdesRGB.iccinsluit, met de standaard condition-identifiersRGB IEC61966-2.1.DisplayP3,Rec2020,A98RGB,ProphotoRGB— wide-gamut RGB-werkruimten, elk met zijn meegeleverde ICC-profiel ingesloten onder een aangepaste (NextPDF wide-gamut …) condition-identifier.
Elke case anders dan DeviceRGB zorgt dat de writer een output-intent-dictionary uitzendt die verwijst naar de ingesloten ICCBased-stream (met zijn /N 3-componentaantal). ISO 32000-2 §14.11.5 definieert de output-intent-dictionary; §8.6.5.5 definieert de ICCBased-kleurruimte die het ingesloten profiel draagt. In de huidige engine wordt deze dictionary geschreven met het PDF/X-output-intent-subtype /GTS_PDFX ongeacht welk meegeleverd profiel je kiest (het PDF/A-archiveringspad gebruikt zijn eigen /GTS_PDFA1-subtype en wordt apart uitgezonden).
De belangrijke kanttekening: omdat alle meegeleverde profielen RGB zijn, declareert dit de RGB-werkruimte en bekijkintentie van het document — het is geen CMYK-doelprofiel, en het transformeert niets naar CMYK. De engine staat je niet toe een aangepast CMYK-doel-ICC te leveren via withOutputColorProfile(). Een echte druk-/PDF-X-CMYK-output-intent vereist een workflow die je eigen CMYK-ICC-profiel als doel insluit; voor een archiverings-output-intent die in dezelfde /OutputIntents-array is bedraad, zie PDF/A-4-uitvoer.
Wanneer je voor elk kiest
Sectie met titel “Wanneer je voor elk kiest”- Device CMYK — de standaard voor elk artwork bestemd voor een procespers. Specificeer je kleuren vanaf het begin in CMYK zodat er stroomafwaarts geen RGB→CMYK-giswerk gebeurt.
- Spot / Separation — merkkleuren die een exacte inkt moeten raken, plus niet-proces-platen (vernis, wit, metallic, uitstans, folie). Registreer eenmaal, schilder op elke tint.
- Output-intent — stel het in wanneer je wilt dat het bestand zelfbeschrijvend is over zijn RGB-werk-/uitvoercondition, of wanneer een verwerker (een viewer, een kleurbeheerde RIP, een validator) een gedeclareerde uitvoercondition verwacht. De meegeleverde profielen declareren alleen een RGB-werk-/uitvoercondition; ze declareren geen echte CMYK-pers- / PDF/X-drukcondition.
Randgevallen en valkuilen
Sectie met titel “Randgevallen en valkuilen”- CMYK-componenten zijn percentages (0–100), geen 0–1. De
…Cmyk-documentmethoden enColor::cmyk()nemen elk kanaal als een0–100-percentage en delen door 100 bij het schrijven van de operator; de content-stream-operand is de genormaliseerde0.0–1.0-waarde. Geef100door voor volle inkt, niet1.0(dat de engine als 1% inkt zou behandelen). - Registreer voordat je een spot selecteert.
setSpotFillColor()/setSpotDrawColor()werpen op als de naam nooit is geregistreerd. Namen worden exact gematcht, inclusief hoofdletters en spaties. - Kleurstaat blijft bestaan. Een CMYK- of spotkleur blijft van kracht totdat je die verandert. Reset vóór een ongerelateerd blok.
- De CMYK-fallback is een benadering. De Separation-tint-transform bestaat zodat niet-spot-renderers iets kunnen tonen; het is niet de persuitvoer. De echte inkt is wat de benoemde plaat produceert.
- Een output-intent is een declaratie, geen conversie. Het declareren van
OutputColorProfile::Srgbtransformeert je kleuren niet naar sRGB; het verklaart de bedoelde condition. Kleurnauwkeurigheid is stroomopwaarts jouw verantwoordelijkheid.
Prestaties
Sectie met titel “Prestaties”Elke kleurselectie is één content-stream-operator; een spot schrijft ook één Separation-resource per geregistreerde inkt. Een ingesloten output-intent-profiel wordt eenmaal per document geschreven. Alle paden blijven ruim binnen het budget van 2000 ms / 64 MB.
Beveiligingsnotities
Sectie met titel “Beveiligingsnotities”Dit recipe zendt alleen de kleuren en het profiel uit die je code specificeert. Het parset geen niet-vertrouwde invoer en maakt geen netwerktoegang. Als kleurmiddelnamen of CMYK-componenten uit externe gegevens komen, valideer ze dan: clamp componenten naar 0–100 en weiger stuurtekens in spotnamen (een NUL-byte in een Separation-naam wordt door de engine geweigerd).
Conformiteit
Sectie met titel “Conformiteit”| Verklaring | Spec | Clause |
|---|---|---|
k en K zijn de kleuroperatoren die de DeviceCMYK niet-strokende / strokende kleur instellen. | ISO 32000-2 | §8.6.8 |
| DeviceCMYK is de subtractieve vier-componenten proceskleurruimte. | ISO 32000-2 | §8.6.4.4 |
| Een Separation-kleurruimte benoemt één kleurmiddel waarvan de tint via een tint-transform op een alternatieve ruimte wordt afgebeeld. | ISO 32000-2 | §8.6.6.4 |
Een ICCBased-kleurruimte sluit een ICC-profielstream in met een /N-componentaantal. | ISO 32000-2 | §8.6.5.5 |
Een output-intent declareert de doel-productiecondition; GTS_PDFX benoemt het druk-subtype. | ISO 32000-2 | §14.11.5 |
Reproduceerbaarheidsprofiel — structureel. Kleuruitzending heeft geen eigen entropie, maar elk opgeslagen document draagt een trailer-/ID en datum-atomen, en een ingesloten ICC-stream is alleen byte-stabiel voor een vast meegeleverd profiel. De ondersteunde claim is structurele gelijkheid na qpdf-normalisatie. Dit recipe beschrijft hoe NextPDF de structuur produceert; het beweert geen pauschale ISO 32000-2-conformiteit.
Commerciële context
Sectie met titel “Commerciële context”Niet van toepassing. Device CMYK, spot-/Separation-kleur en de output-intent-declaratie zijn Core-capaciteiten zonder Premium-gate. Core ondersteunt de hier getoonde meegeleverde RGB-output-intent-declaratie; aangepaste CMYK-drukcondition-ICC-workflows worden door dit recipe niet geclaimd.