Technický článek

Proofing CMYK overprintu a vykreslovací zařízení v HotPDF

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í