RecolorDocument flytter en hel PDF over i ét farverum, og RecolorPage gør det samme for en enkelt side. Begge tager 1 for gråtone, 2 for RGB og 3 for CMYK, og returnerer, hvor mange farver der blev konverteret. Geometri, tekst og billeder forbliver præcis, hvor de var; kun farven ændrer sig
Dette er den operation, du vil have udført, før du sender arbejde til et trykkeri, der forventer ét rum, eller når et farvedokument skal blive til et gråtonedokument uden at blive regenereret. Alternativet — at genopbygge dokumentet fra dets kildedata i målrummet — er kun tilgængeligt, når du stadig har kildedata, hvilket for alt modtaget udefra ikke er tilfældet
Hvad konverteres, og i hvilken rækkefølge
Farveoperatorer først: de fyld og streg, en side sætter under tegning. En farve, der allerede er i målrummet, læses uændret, så en side, hvis farver ikke behøver ændring, bevarer sine oprindelige byte frem for at blive omskrevet til identiske værdier. Den egenskab betyder mere, end det lyder som på et stort dokument, fordi urørte objekter forbliver urørte i filen
Billeder kommer derefter, og de er den del, der tidligere manglede. Et dokument gjort gråt med kun dets operatorer konverteret viste stadig farvebilleder på grå sider, hvilket er værre end begge yderpunkter. Et billede konverteres, når det bærer otte bit pr. komponent, et device-farverum og enten ingen komprimering eller almindelig Flate
Indekserede billeder konverteres gennem deres farvetabel: paletten konverteres, og hver sample beholder det indeks, den allerede havde. Det dækker de palet-billeder, et screenshot eller et diagram normalt gemmes som, og det konverterer dem uanset, hvordan deres samples er pakket eller komprimeret, fordi samples aldrig ændres
var
Lib: TPDFlib;
Converted: Integer;
begin
Lib := TPDFlib.Create;
try
Lib.LoadFromFile('brochure.pdf', '');
Converted := Lib.RecolorDocument(1); // 1 grey, 2 RGB, 3 CMYK
Log(Format('%d colours converted', [Converted]));
Lib.SaveToFile('brochure-grey.pdf');
finally
Lib.Free;
end;
end;
Hvorfor bliver en JPEG stående uændret?
For at konvertere dens farver ville betyde at re-kode den, og re-kodning er en anden operation med andre konsekvenser. Et JPEG- eller fax-billede beholder sine egne byte: dekodning, konvertering og rekompilering ville ændre selve billeddata, indføre en anden generation af tabs-arter og ændre filstørrelsen på måder, kalderen ikke bad om
Soft masks og stencil masks forbliver uændret af en anden grund. Begge læses som dækning frem for som farve, og at konvertere en ville efterlade siden, der viser masken som et billede — en gennemsigtighedsmaske renderet som gråt artwork oven på det indhold, den var beregnet til at forme. At lade dem være er ikke en begrænsning, der skal omgås; det er det korrekte resultat
Farver sat gennem et ICCBased-, Separation-, Indexed- eller Pattern-rum forbliver også, som de står på operator-niveau. At konvertere dem uden at læse deres profil ville ændre, hvordan siden ser ud, frem for at bevare den, og en omfarvning, hvis hele løfte er bevaring, kan ikke begynde at gætte på profiler
Overgange konverteres med de stop, der ligger bag dem
En overgang er et farverum plus en funktion, der producerer farver i det, og at konvertere den ene uden den anden producerer vrøvl — en konverteret overgang, hvis stop blev efterladt, læses som en kanal forvekslet med et gråniveau, hvilket på en side ser ud som et band af den helt forkerte farve. Overgangens farverum og de stop, der ligger bag den, flyttes sammen
Overgange findes, uanset hvor de bor: givet deres eget objekt, skrevet inde i det pattern, der maler dem, eller liggende i en sides shading-ressourcer. Den dækning betyder noget, fordi design-værktøjer distribuerer dem forskelligt, og en konverter, der kun håndterede én placering, ville efterlade et dokument halvt konverteret uden nogen tydelig fejlslag
To typer efterlades bevidst, som de står. En overgang bygget fra en sampled- eller PostScript-funktion beholder sin egen definition, og det gør mesh-typerne også, som bærer deres farver i en strøm frem for i en funktion. At omskrive nogen af dem er en anden operation end at konvertere en farve, og at gøre det tavst inde i en omfarvningsrute ville være en overraskelse
// Convert a single page - useful when only the cover needs to change
Lib.SelectPage(1);
Lib.RecolorPage(3); // this page to CMYK
Lib.SaveToFile('cover-cmyk.pdf');
Hvor omfarvning hører til før en tryk-indsendelse
Brug den som et normaliseringstrin, ikke som farvestyring. Omfarvning konverterer værdier mellem device-rum; den anvender ikke en ICC-profil, respekterer ikke en rendering-intent og simulerer ikke en tryk-betingelse. For et job, der skal ramme et kontrakt-proof, er den profil-drevne arbejdsgang svaret, og omfarvning er højst det trin, der får alt ind i ét rum først
Hvor den tjener sin plads, er det almindelige produktionsproblem: en indsendelse, der skal være grå og ankommer med et RGB-logo, et internt dokument, der ikke må trykkes i farve, en batch filer, der skal være i ét rum, før et preflight-trin vil acceptere dem. Par den med et tjek — noterne om PDF/A- og PDF/UA-preflight og om compliance- og signerings-workbenchen dækker at køre dommen som del af det samme job
Hvis dokumentet også skal have undersøgt sit vektor-artwork frem for konverteret det, dækker gennemgangen af vektor-grafik, shadere og overgange, hvordan de objekter opbygges i første omgang, hvilket er nyttig kontekst for at forstå, hvad en omfarvning kan og ikke kan nå
PDFlibPas er et Pascal-baseret PDF-bibliotek til Delphi, C++Builder og Lazarus uden nogen ekstern runtime, så et farve-normaliseringstrin kører inde i din egen tjeneste frem for at kalde en ekstern konverter — se PDFlibPas-produktsiden for den fulde dokumentbehandlings-API