RecolorDocument flytter en hel PDF til ett fargerom, og RecolorPage gjør det samme for én enkelt side. Begge tar 1 for gråtoner, 2 for RGB og 3 for CMYK, og returnerer hvor mange farger som ble konvertert. Geometri, tekst og bilder forblir nøyaktig der de var; bare fargen endres
Dette er operasjonen du vil ha før du sender arbeid til et trykk som forventer ett rom, eller når et fargedokument må bli et gråtone-dokument uten å bli generert på nytt. Alternativet — å bygge dokumentet på nytt fra kildedataene i målrommet — er bare tilgjengelig når du fortsatt har kildedataene, noe du ikke har for noe som helst mottatt utenfra
Hva som konverteres, og i hvilken orden
Fargeoperatorer først: fyllingene og strekene en side setter mens den tegnes. En farge som allerede er i målrommet, lar seg være, slik at en side hvis farger ikke trenger endring beholder sine opprinnelige bytes i stedet for å bli skrevet om til identiske verdier. Den egenskapen betyr mer enn det høres ut som på et stort dokument, fordi urørte objekter forblir urørte i filen
Bilder kommer deretter, og de er den delen som pleide å mangle. Et dokument gjort grått med bare operatorene konvertert viste fortsatt fargebilder på grå sider, noe som er verre enn noen av ytterpunktene. Et bilde konverteres når det bærer åtte bit per komponent, et enhetsfargerom, og enten ingen kompresjon eller ren Flate
Indekserte bilder konverteres gjennom sin fargetabell: paletten konverteres og hver prøve beholder indeksen den allerede hadde. Det dekker palettbildene et skjermbilde eller et diagram vanligvis lagres som, og konverterer dem uansett hva prøvene er pakket eller komprimert med, fordi prøvene aldri endres
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 blir en JPEG latt i fred?
Fordi å konvertere fargene ville bety å re-kode den, og re-koding er en annen operasjon med andre konsekvenser. Et JPEG- eller faksbilde beholder sine egne bytes: dekoding, konvertering og rekomprimering ville endret bildedataene selv, innført en annen generasjon med tapsbaserte artefakter, og endret filstørrelsen på måter oppringeren ikke ba om
Myke masker og stensilmasker blir latt i fred av en annen grunn. Begge leses som dekning snarere enn som farge, og å konvertere en ville få siden til å vise masken som et bilde — en gjennomsiktighetsmasken rendret som grå kunstverk oppå innholdet den skulle forme. Å la dem være er ikke en begrensning å omgå; det er det korrekte resultatet
Farger satt gjennom et ICCBased-, Separation-, Indexed- eller Pattern-rom blir også stående slik de er på operatørnivå. Å konvertere dem uten å lese profilen ville endret hvordan siden ser ut i stedet for å bevare den, og en omfargeingsrunde hvis hele løfte er bevaring kan ikke begynne å gjette på profiler
Gradienter konverteres med stoppene bak seg
En gradient er et fargerom pluss en funksjon som produserer farger i det, og å konvertere den ene uten den andre produserer nonsens — en konvertert gradient hvis stopp ble latt etter leses som en kanal forvekslet med et gråtonenivå, noe som på en side ser ut som et bånd med feil farge i sin helhet. Gradientens fargerom og stoppene bak den flyttes sammen
Gradienter finnes uansett hvor de bor: gitt et objekt for seg selv, skrevet inn i mønsteret som maler dem, eller liggende i en sides skyggeleggingsressurser. Den dekningen betyr noe fordi designverktøy distribuerer dem ulikt, og en konverterer som bare håndterte én plassering ville etterlate et dokument halvt konvertert uten noe åpenbart mønster i feilene
To typer bevisst latt som de er. En gradient bygget fra en samlet eller PostScript-funksjon beholder sin egen definisjon, og det gjør også meshtypene, som bærer sine farger i en strøm snarere enn i en funksjon. Å skrive om en av dem er en annen operasjon enn å konvertere en farge, og å gjøre det i stillhet inne i en omfargeingsrunde 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 omfarging hører hjem før et trykkinnsendelse
Bruk det som et normaliseringstrinn, ikke som fargestyring. Omfarging konverterer verdier mellom enhetsrom; den anvender ikke en ICC-profil, respekterer ikke en rendering-intent og simulerer ikke en trykktilstand. For en jobb som må treffe et kontraktskorrektur, er den profildrevne arbeidsflyten svaret, og omfarging er høyst steget som får alt inn i ett rom først
Der den tjener sin plass er det vanlige produksjonsproblemet: en innsendelse som må være grå og ankommer med en RGB-logo, et internt dokument som ikke må skrives ut i farge, en gruppe filer som må være ett rom før et preflight-trinn aksepterer dem. Par den med en sjekk — notatene om PDF/A- og PDF/UA-preflight og om compliance- og signeringsarbeidsbenken dekker å kjøre dommen som del av den samme jobben
Hvis dokumentet også trenger sin vektor-kunstverk undersøkt snarere enn konvertert, dekker gjennomgangen av vektorgrafikk, skyggelegging og gradienter hvordan disse objektene bygges i utgangspunktet, noe som er nyttig kontekst for å forstå hva en omfargeingsrunde kan og ikke kan nå
PDFlibPas er et PDF-bibliotek i ren Pascal for Delphi, C++Builder og Lazarus uten noen ekstern runtime, slik at et farge-normaliseringstrinn kjører inne i din egen tjeneste i stedet for å skalle ut til en konverterer — se PDFlibPas-produktsiden for det fullstendige dokumentbehandlings-API-et