RecolorDocument premješta cijeli PDF u jedan kolorni prostor, a RecolorPage čini isto za pojedinu stranicu. Oboje uzima 1 za sive, 2 za RGB i 3 za CMYK, i vraća koliko je boja pretvoreno. Geometrija, tekst i slike ostaju točno gdje su bile; mijenja se samo boja
Ovo je operacija koju želite prije slanja posla u tiskaru koja očekuje jedan prostor, ili kad kolorni dokument mora postati siv bez da bude ponovno generiran. Alternativa, ponovna izgradnja dokumenta iz njegovih izvornih podataka u ciljni prostor, dostupna je samo kad i dalje imate izvorne podatke, što za bilo što primljeno izvana nemate
Što se pretvara i kojim redoslijedom
Najprije operatori boje: ispune i poteze koje stranica postavlja pri crtanju. Boja koja je već u ciljnom prostoru ostaje netaknuta, pa stranica čije boje ne trebaju promjenu zadržava svoje izvorne bajtove umjesto da bude prepisana na identične vrijednosti. Ta osobina važnija je nego što zvuči na velikom dokumentu, jer netaknuti objekti ostaju netaknuti u datoteci
Slijede slike, i to je dio koji je nekad nedostajao. Dokument prebačen u sive s pretvorenim samo operatorima i dalje je prikazivao slike u boji na sivim stranicama, što je gore od bilo koje krajnosti. Slika se pretvara kad nosi osam bitova po komponenti, uređajni kolorni prostor te ili bez kompresije ili obični Flate
Indeksirane slike pretvaraju se kroz svoju tablicu boja: paleta se pretvara, a svaki uzorak zadržava indeks koji je već držao. To pokriva palete slika kakve snimka zaslona ili grafikon obično pohranjuju, i pretvara ih bez obzira na to kako su njihovi uzorci pakirani ili komprimirani, jer se uzorci nikad ne mijenjaju
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;
Zašto se JPEG ostavlja na miru?
Zato što bi pretvaranje njegovih boja značilo ponovno kodiranje, a ponovno kodiranje je drugačija operacija s drugačijim posljedicama. JPEG ili faks slika zadržava vlastite bajtove: dekodiranje, pretvaranje i ponovna kompresija promijenili bi same podatke slike, uveli drugu generaciju gubitnih artefakata i promijenili veličinu datoteke na načine koje pozivatelj nije tražio
Meke maske i maske šablone ostavljaju se na miru iz drugog razloga. Oboje se čita kao pokrivanje, a ne kao boja, i pretvaranje jedne od njih ostavilo bi stranicu da prikazuje masku kao sliku, masku prozirnosti renderiranu kao siva grafika povrh sadržaja kojem je trebala oblikovati. Njihovo ostavljanje nije ograničenje zaobilaska; to je ispravan rezultat
Boje postavljene kroz ICCBased, Separation, Indexed ili Pattern prostor također ostaju kako stoje na razini operatora. Pretvaranje tih bez čitanja njihovog profila promijenilo bi izgled stranice umjesto da ga očuva, a prolaz prebojavanja čije je cijelo obećanje očuvanje ne može početi nagađati profile
Gradijenti se pretvaraju sa svojim stupnjevima
Gradijent je kolorni prostor plus funkcija koja u njemu proizvodi boje, i pretvaranje jednog bez drugog proizvodi besmislicu, pretvoreni gradijent čiji su stupnjevi ostavljeni čita se kao kanal zamijenjen za razinu sive, što na stranici izgleda kao pojas potpuno pogrešne boje. Kolorni prostor gradijenta i njegovi stupnjevi pomiču se zajedno
Gradijenti se nalaze gdje god žive: kao samostalni objekt, zapisani unutar uzorka koji ih ispisuje ili smješteni u resurse sjenčanja stranice. Ta pokrivenost je važna jer ih dizajnerski alati raspodjeljuju različito, a pretvarač koji bi obrađivao samo jedan raspored ostavio bi dokument napola pretvorenim bez očitog uzorka u neuspjesima
Dvije vrste namjerno ostaju kako stoje. Gradijent izgrađen iz uzorkovane ili PostScript funkcije zadržava vlastitu definiciju, kao i tipovi mreže, koji nose svoje boje u streamu umjesto u funkciji. Prepisivanje bilo kojeg od njih drugačija je operacija od pretvaranja boje, i tiho izvođenje unutar prolaza prebojavanja bilo bi iznenađenje
// 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');
Gdje se prebojavanje uklapa prije slaganja u tiskaru
Koristite ga kao korak normalizacije, a ne kao upravljanje bojom. Prebojavanje pretvara vrijednosti između uređajnih prostora; ne primjenjuje ICC profil, ne poštuje namjeru renderiranja i ne simulira uvjete tiska. Za posao koji mora pogoditi ugovorni probni otisak, cjevovod vođen profilom jest odgovor, a prebojavanje je najviše korak koji sve najprije dovodi u jedan prostor
Gdje zaslužuje svoje mjesto jest obični proizvodni problem: slaganje koje mora biti sivo, a stiže s RGB logotipom; interni dokument koji se ne smije tiskati u boji; skupina datoteka koje moraju biti u jednom prostoru prije nego što korak preleta prihvati. Sparite ga s provjerom: bilješke o PDF/A i PDF/UA preletu te o radnom stolu za sukladnost i potpisivanje pokrivaju pokretanje presude kao dio istog posla
Ako dokument također treba pregledati vektorsku grafiku umjesto pretvoriti je, prikaz vektorske grafike, sjenača i gradijenata pokriva kako se ti objekti uopće izgrađuju, što je koristan kontekst za razumijevanje do čega prolaz prebojavanja može, a do čega ne može doći
PDFlibPas je izvorna Pascal PDF knjižnica za Delphi, C++Builder i Lazarus bez vanjskog izvršnog okruženja, pa korak normalizacije boje radi unutar vlastitog servisa umjesto da poziva vanjski pretvarač. Pogledajte stranicu proizvoda PDFlibPas za cijeli API obrade dokumenata