Odborný článok

Prevod PDF do jedného farebného priestoru v Delphi

RecolorDocument presunie celé PDF do jedného farebného priestoru a RecolorPage urobí to isté pre jednu stranu. Obe prijímajú 1 pre odtiene šedej, 2 pre RGB a 3 pre CMYK a vracajú počet konvertovaných farieb. Geometria, text a obrázky ostanú presne tam, kde boli; mení sa iba farba

Toto je operácia, ktorú chcete vykonať pred poslaním práce do tlačiarne, ktorá očakáva jeden priestor, alebo keď sa farebný dokument musí stať šedým bez regenerácie. Alternatíva — prestavba dokumentu z jeho zdrojových dát v cieľovom priestore — je dostupná iba vtedy, keď stále máte zdrojové dáta, čo pri čomkoľvek prijatom zvonka nemáte

Čo sa konvertuje a v akom poradí

Najprv farebné operátory: výplne a ťahy, ktoré strana počas kreslenia nastavuje. Farba, ktorá je už v cieľovom priestore, sa nechá na pokoji, takže strana, ktorej farby sa nemusia meniť, si zachová pôvodné bajty namiesto toho, aby bola prepísaná na rovnaké hodnoty. Táto vlastnosť má väčší význam, než to znie, na veľkom dokumente, pretože nedotknuté objekty ostanú v súbore nedotknuté

Nasledujú obrázky a to je časť, ktorá kedysi chýbala. Dokument premenený na šedý iba s konvertovanými operátormi stále zobrazoval farebné obrázky na šedých stranách, čo je horšie než ktorýkoľvek z extrémov. Obrázok sa konvertuje, keď nesie osem bitov na komponent, zariadený farebný priestor a buď žiadnu kompresiu, alebo čistý Flate

Indexované obrázky sa konvertujú cez ich farebnú tabuľku: paleta sa skonvertuje a každý vzorka si ponechá index, ktorý už mala. To pokrýva paletové obrázky, do ktorých sa zvyčajne ukladá snímka obrazovky alebo graf, a konvertuje ich bez ohľadu na to, ako sú ich vzorky zabalené alebo komprimované, pretože vzorky sa nikdy nezmenia

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;

Prečo sa JPEG necháva na pokoji?

Pretože konverzia jeho farieb by znamenala jeho prekódovanie a prekódovanie je iná operácia s inými dôsledkami. JPEG alebo faxový obrázok si ponechá vlastné bajty: dekódovanie, konverzia a rekompresia by zmenili samotné obrazové dáta, vniesli by druhú generáciu stratových artefaktov a zmenili veľkosť súboru spôsobom, o ktorý volajúci nežiadal

Mäkké masky a šablónové masky sa nechávajú na pokoji z iného dôvodu. Obe sa čítajú ako pokrytie a nie ako farba a konverzia jednej z nich by viedla k tomu, že by strana zobrazovala masku ako obrázok — transparentná maska vykreslená ako šedá grafika na vrchu obsahu, ktorý mala tvarovať. Nechať ich nie je obmedzenie, ktoré by sa dalo obísť; je to správny výsledok

Farby nastavené cez ICCBased, Separation, Indexed alebo Pattern priestor sa tiež nechávajú na úrovni operátora tak, ako stoja. Ich konverzia bez prečítania profilu by zmenila vzhľad strany namiesto jeho zachovania a recolovací prechod, ktorého celým sľubom je zachovanie, nemôže začať hádať profily

Prechody sa konvertujú spolu so stopami, ktoré ich nesú

Prechod je farebný priestor doplnený funkciou, ktorá v ňom produkuje farby, a konverzia jednej bez druhej produkuje nezmysel — skonvertovaný prechod so zastavenými stopami sa prečíta ako kanál zmiešaný za úroveň šedej, čo na strane vyzerá ako prúh nesprávnej farby. Farebný priestor prechodu a jeho stopy sa posúvajú spolu

Prechody sa hľadajú všade, kde žijú: ako samostatný objekt, zapísané vo vnútri vzoru, ktorý ich maľuje, alebo uložené v tieniacich zdrojoch strany. Toto pokrytie je dôležité, pretože dizajnové nástroje ich rozdeľujú rozlične a konvertor, ktorý by spracoval iba jedno umiestnenie, by zanechal dokument napoly skonvertovaný bez zjavnej vzorky v zlyhaniach

Dva druhy sa zámerne nechávajú tak, ako sú. Prechod postavený zo vzorkovanej alebo PostScript funkcie si ponechá vlastnú definíciu a rovnako tak typy mesh, ktoré nesú farby v streame namiesto vo funkcii. Prepis oboch je odlišná operácia od konverzie farby a ich tiché vykonanie vo vnútri recolovacieho prechodu by bolo prekvapením

// 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');

Kam recolovanie patrí pred podaním do tlače

Použite ho ako krok normalizácie, nie ako správu farieb. Recolovanie konvertuje hodnoty medzi zariadenými priestormi; neaplikuje ICC profil, nerešpektuje rendering intent a nesimuluje stav tlače. Pre prácu, ktorá musí trafiť zmluvnú farebnú skúšku, je odpoveďou workflow riadený profilom a recolovanie je nanajvýš krokom, ktorý dostane všetko do jedného priestoru ako prvý

Kde si získa svoje miesto, je bežný produkčný problém: podanie, ktoré musí byť šedé a prichádza s RGB logom, interný dokument, ktorý sa nesmie tlačiť farebne, alebo dávka súborov, ktoré musia byť v jednom priestore skôr, než ich krok preflight prijme. Párujte ho s kontrolou — poznámky k PDF/A a PDF/UA preflightu a k workbenchu zhody a podpisovania pokrývajú spustenie verdiktu ako súčasť tej istej úlohy

Ak dokument potrebuje preskúmať svoju vektorovú grafiku namiesto jej konverzie, návod k vektorovej grafike, shaderom a prechodom popisuje, ako sa tieto objekty konštruujú, čo je užitočný kontext na pochopenie toho, čo recolovací prechod dokáže a nedokáže zachytiť

PDFlibPas je natívna Pascal PDF knižnica pre Delphi, C++Builder a Lazarus bez externého runtime, takže krok normalizácie farby beží vo vnútri vašej služby namiesto volania externého konvertora — kompletné API na spracovanie dokumentov nájdete na produktovej stránke PDFlibPas