HotPDF vykresluje načtenou stránku PDF jediným vstupním bodem, RenderLoadedPageToDevice, a zařízení, které mu předáte, rozhoduje, zda je výsledkem bitmapa, kresba na externím kontextu zařízení, jako je plátno tiskárny, nebo vektorový rozšířený metafil. Nastavte RenderOverprintPreview na True a tatáž volba simuluje overprint procesních barev CMYK, takže operátor vidí na obrazovce interakci barev, která by se jinak objevila až na tiskovém archu
Tyto dvě funkce řeší různé problémy, které se náhodou potkávají ve stejné cestě kódu. Abstrakce zařízení odstraňuje větvění, kde náhled, tisk a export měly každý svou vlastní vykreslovací volbu s vlastním posunem. Proofing overprintu odstraňuje třídu produkčních chyb, kdy dokument vypadá správně v každém prohlížeči a z tisku vychází špatně
Proč se stránka tiskne jinak, než se zobrazuje v náhledu?
Protože overprint je instrukce zobrazovacímu zařízení, nikoli operace malby. Když stránka nastaví /OP nebo /op ve stavu grafiky na true, říká RIPu, aby nevyhazoval barvy pod sebou — azurová objekt kreslený přes žlutou nechá žlutou na místě a arch ukáže zelenou. Prohlížeč, který overprint ignoruje, barvy normálně vyhodí a ukáže azurovou. Ani jedno není samo o sobě špatně a právě to je ten problém: obrazovka a tisk se neshodnou a nikdo se to nedozví, dokud nedorazí proofy
RenderOverprintPreview nutí HotPDF brát instrukci vážně pro barvy DeviceCMYK řízené /OP, /op a /OPM 1. Výsledkem je náhled proofu, nikoli náhled prohlížeče: černá překrývající tón zůstane bohatou vrstvou místo aby prorazila díru a náhodný overprint na bílém textu odhalí mizející text, jakým bude
var
Pdf: THotPDF;
Device: THPDFBitmapRenderDevice;
Proof: TBitmap;
begin
Pdf := THotPDF.Create(nil);
try
Pdf.LoadFromFile('cover-cmyk.pdf');
Pdf.RenderOverprintPreview := True; // proof, not plain preview
Device := THPDFBitmapRenderDevice.Create;
try
if Pdf.RenderLoadedPageToDevice(0, 150, Device) then
begin
Proof := Device.TakeBitmap; // ownership moves to the caller
try
Image1.Picture.Assign(Proof);
finally
Proof.Free;
end;
end;
finally
Device.Free;
end;
finally
Pdf.Free;
end;
end;
Nastavení se účastní identity renderovací mezipaměti, v paměti i na disku, takže běžný náhled a náhled proofu nikdy nesdílejí stejnou bitmapu. Přepnutí vlastnosti nevyžaduje, abyste cokoli ručně invaliadovali — mezipaměť, která by vrátila to nesprávné z těch dvou, by byla horší než žádná
Tři zařízení, jedna vykreslovací volba
THPDFRenderDevice je abstraktní třída se dvěma členy, na kterých záleží: Kind, která hlásí cíl jako rdkBitmap, rdkDeviceContext nebo rdkEnhancedMetafile, a Execute, kterou volá knihovna. S HotPDF se dodávají tři konkrétní zařízení a každé vlastní svůj výstup jinak
THPDFBitmapRenderDevice vlastní TBitmap, dokud TakeBitmap nepřenechá vlastnictví vám. THPDFDeviceContextRenderDevice přijímá existující HDC plus šířku a výšku a kreslí přímo do něj, což je způsob, jak vykreslit na plátno tiskárny bez bitmapové zastávky. THPDFMetafileRenderDevice vlastní TMetafile, dokud TakeMetafile nepřenese vlastnictví, čímž drží vektorový obsah jako vektory pro konzumenty, kteří ho takový potřebují
var
Device: THPDFDeviceContextRenderDevice;
begin
Printer.BeginDoc;
try
Device := THPDFDeviceContextRenderDevice.Create(
Printer.Canvas.Handle, Printer.PageWidth, Printer.PageHeight);
try
Pdf.RenderLoadedPageToDevice(PageIndex, 300, Device);
finally
Device.Free;
end;
finally
Printer.EndDoc;
end;
end;
Číst Kind místo testování runtime třídy je záměrné. Aplikační kód, který dispatchuje podle druhu zařízení, funguje i tehdy, když je zařízení obaleno, dekorováno nebo nahrazeno, kdežto kód, který testuje is THPDFBitmapRenderDevice, nikoliv
Co převod vlastnictví znamená v praxi
Před TakeBitmap nebo TakeMetafile vlastní objekt zařízení a uvolní ho ve svém destruktoru. Po volání ho vlastníte vy a zařízení už nikoliv. Oba vzory jsou legitimní: použijte vlastnost Bitmap nebo Metafile, když má objekt přežít jen vykreslovací volání, a převzete vlastnictví, když má přežít zařízení
Režim selhání je ten obvyklý delphiovský. Vezměte bitmapu, uvolněte zařízení, zapomeňte uvolnit bitmapu a máte leak, který roste s počtem stránek — neviditelný na pětistránkovém testu a zřejmý na dávce pěti set stránek. Obalte oba objekty vlastním try/finally místo abyste sdíleli jeden a otázka vlastnictví se zodpoví sama
Proofing overprintu a průhlednost na stejné stránce
Vyřazení skupiny průhlednosti zůstává aktivní, i když je náhled overprintu zapnutý, a oboje se kompozituje ve stejné cestě ohraničeného malířského snapshotu. To má váhu, protože skutečné tiskově připravené soubory二者 neustále míchají: skupina průhlednosti nesoucí artwork sedí na pozadí, jehož černá je nastavena na overprint, a simulovat jedno bez druhého produkuje proof, který je špatný novým způsobem místo aby byl správný
Mějte na paměti limity. Náhled overprintu simuluje chování procesních barev pro nátěry DeviceCMYK pod výše jmenovanými ovládacími prvky overprintu. Je to proof interakce barev, nikoli barevně řízený kontraktní proof: nenahrazuje ICC rouru a neřekne vám, co konkrétní tisk a materiál vydají. Zacházejte s ním tak, jak se prepress operátor zachází s náhledem overprintu v profesionálním prohlížeči — jako s kontrolou, která zachytí chyby, jež nikdo nechytí pohledem na běžný náhled
Zapracování proofingu do preflight kroku
Užitečné místo pro toto je vedle kontrol, které už děláte. Průběh preflightu ohlásí, že černý text je nastaven na overprint; proof render ukáže operátorovi, co to na stránce znamená; a oboje přijde do stejného reportu. Pro spotové barvy, které v obalovém provedení často doprovázejí overprint, rozebírá průvodce vykreslováním spotových barev Separation a DeviceN kolorantní stranu stejné stránky, zatímco poznámky k vykreslení stránky PDF do bitmapy a k tisku načteného PDF přes TPrinter pokrývají dva cílové device v jejich obyčejné, ne-proof podobě
HotPDF vykresluje, provuje a tiskne načtené stránky PDF z nativního VCL kódu pro Delphi a C++Builder bez externí renderovací DLL, kterou by bylo potřeba nasazovat s aplikací — stránka komponenty HotPDF má seznam renderovacích funkcí a zkušební sestavení