RecolorDocument prebacuje čitav PDF u jedan prostor boja, a RecolorPage radi isto za pojedinačnu stranicu. Oba uzimaju 1 za sivu, 2 za RGB i 3 za CMYK, i vraćaju koliko je boja konvertovano. Geometrija, tekst i slike ostaju tačno gde su bile; menja se samo boja
Ovo je operacija koja vam treba pre slanja posla na mašinu koja očekuje jedan prostor, ili kad dokument u boji mora postati sivi bez ponovnog generisanja. Alternativa — ponovna izgradnja dokumenta iz njegovih izvornih podataka u ciljnom prostoru — dostupna je samo kad i dalje imate izvorne podatke, što za sve što primate spolja nemate
Šta se konvertuje, i kojim redosledom
Prvo operatori boje: ispune i poteze koje stranica postavlja dok crta. Boja koja je već u ciljnom prostoru se ostavlja na miru, tako da stranica čije boje ne treba promena zadržava svoje originalne bajtove umesto da bude prepisana na identične vrednosti. To svojstvo je važnije nego što zvuči na velikom dokumentu, jer ne dirani objekti ostaju ne dirani u fajlu
Slike dolaze zatim, i to je deo koji je nekada nedostajao. Dokument prebačen u sivu sa samo konvertovanim operatorima i dalje je prikazivao slike u boji na sivim stranicama, što je gore od bilo koje krajnjosti. Slika se konvertuje kad nosi osam bita po komponenti, prostor boje uređaja, i bilo bez kompresije ili sa običnim Flate
Indeksirane slike se konvertuju kroz svoju tabelu boja: paleta se konvertuje i svaki uzorak zadržava indeks koji je već imao. To pokriva palete slika koje snimak ekrana ili grafikon obično čuvaju, i konvertuje ih bez obzira na to kako su im uzorci pakovani ili kompresovani, jer se uzorci nikada ne menjaju
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 konvertovanje njegovih boja značilo ponovno kodiranje, a ponovno kodiranje je drugačija operacija sa drugačijim posledicama. JPEG ili faks slika zadržava svoje sopstvene bajtove: dekodiranje, konvertovanje i ponovna kompresija bi promenili same podatke slike, uveli drugu generaciju gubitnih artefakata, i promenili veličinu fajla na načine koje pozivalac nije tražio
Meko maskiranje i maske šablona se ostavljaju na miru iz drugog razloga. Oba se čitaju kao pokrivenost a ne kao boja, i konvertovanje nekog od njih bi dovelo do toga da stranica prikazuje masku kao sliku — maska transparentnosti renderovana kao siva grafika preko sadržaja koji je trebalo da oblikuje. Ostavljanje ih nije ograničenje koje treba zaobići; to je ispravan rezultat
Boje postavljene kroz ICCBased, Separation, Indexed ili Pattern prostor takođe ostaju kako stoje na nivou operatora. Konvertovanje tih bez čitanja njihovog profila bi promenilo kako stranica izgleda umesto da je sačuva, a prolaz ponovnog obojenja čije je celo obećanje očuvanje ne može početi nagađanjem profila
Gradijenti se konvertuju sa stupovima iza njih
Gradijent je prostor boja plus funkcija koja proizvodi boje u njemu, i konvertovanje jednog bez drugog proizvodi besmislicu — konvertovan gradijent čiji su stupovi ostavljeni čita se kao kanal pomešan sa nivoom sive, što na stranici izgleda kao traka pogrešne boje u potpunosti. Prostor boja gradijenta i stupovi iza njega se pomeraju zajedno
Gradijenti se nalaze gde god žive: kao objekat svog sopstvenog, napisan unutar obrasca koji ih boji, ili smešten u izvorima senčenja stranice. Ta pokrivenost je važna jer alati za dizajn distribuiraju ih različito, i konvertor koji obrađuje samo jedan raspored bi ostavio dokument polovično konvertovanim bez očiglednog obrasca u neuspesima
Dve vrste se namerno ostavljaju kakve jesu. Gradijent izgrađen iz uzorkovane ili PostScript funkcije zadržava svoju sopstvenu definiciju, kao i tipovi mreže, koji nose svoje boje u toku a ne u funkciji. Prepisivanje bilo kog od njih je drugačija operacija od konvertovanja boje, i tiho urađeno unutar prolaza ponovnog obojenja bi bilo 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');
Gde se ponovno obojenje uklapa pre podnošenja na mašinu
Koristite ga kao korak normalizacije, a ne kao upravljanje bojom. Ponovno obojenje konvertuje vrednosti između prostora uređaja; ne primenjuje ICC profil, ne poštuje nameru renderovanja i ne simulira uslove mašine. Za posao koji mora pogoditi ugovorni probni otisak, tok vođen profilom je odgovor, a ponovno obojenje je najviše korak koji sve prebacuje u jedan prostor prvo
Tamo gde zaslužuje svoje mesto je uobičajeni problem u proizvodnji: podnošenje koje mora biti sivo, a stiže sa RGB logotipom, interni dokument koji se ne sme štampati u boji, grupa fajlova koja mora biti u jednom prostoru pre nego što preflight korak prihvati. Sparite ga sa proverom — beleške o PDF/A i PDF/UA preflightu i o radnoj stanici za usklađenost i potpisivanje pokrivaju pokretanje verdikta kao deo istog posla
Ako dokument takođe zahteva da se njegova vektorska grafika pregleda a ne konvertuje, prolaz kroz vektorsku grafiku, senčare i gradijente pokriva kako se ti objekti uopšte grade, što je koristan kontekst za razumevanje šta prolaz ponovnog obojenja može i ne može dosegnuti
PDFlibPas je nativna Pascal PDF biblioteka za Delphi, C++Builder i Lazarus bez eksternog izvršnog okruženja, tako da korak normalizacije boje radi unutar vašeg sopstvenog servisa umesto da poziva spoljašnji konvertor — pogledajte PDFlibPas stranicu proizvoda za kompletan API za obradu dokumenata