HotPDF upodablja naloženo stran PDF skozi eno vstopno točko, RenderLoadedPageToDevice, naprava, ki mu jo izročite, pa odloča, ali je rezultat bitna slika, risba na zunanjem kontekstu naprave, kot je platno tiskalnika, ali vektorska izboljšana meta-datoteka. Nastavite RenderOverprintPreview na True in isti klic simulira prektisk procesnih barv CMYK, tako operater vidi na zaslonu interakcijo črnil, ki bi se sicer pokazala šele na tiskovini
Ti dve zmogljivosti rešujeta različni težavi, ki se slučajno srečata v isti poti kode. Abstrakcija naprave odstranja vejo, kjer sta predogled, tisk in izvoz imeli vsak svoj klic upodabljanja s svojim odmikom. Prevleka prektiska odstranja razred proizvodnih napak, kjer dokument v vsakem bralniku izgleda pravilno in pride s stroja napačno
Zakaj se stran natisne drugače, kot se predogleda?
Ker je prektisk navodilo napravi za slikanje in ne operacija barvanja. Ko stran v grafičnem stanju nastavi /OP ali /op na resnično, RIP-u govori, da ne izbije črnil pod seboj — cianov objekt, narisán čez rumeno, pusti rumeno na mestu, na listu pa se pokaže zelena. Bralnik, ki prektisk ignorira, izbija običajno in pokaže ciano. Noben sam po sebi ni napačen in to je natanko težava: zaslon in tisk se ne strinjata in nihče ne izve, dokler ne prispejo probe
RenderOverprintPreview prisili HotPDF, da navodilo upošteva resno za barve DeviceCMYK, ki jih upravljajo /OP, /op in /OPM 1. Rezultat je predogled probe in ne predogled bralnika: črna, ki prektiska odtenek, ostane bogata prekrivka namesto da prereže luknjo, oblikovalčev nenamerni prektisk belega besedila pa postane viden kot izginjajoče besedilo, kakršno bo
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;
Nastavitev sodeluje v identiteti predpomnilnika upodabljanja, v pomnilniku in na disku, tako da navadni predogled in predogled probe nikoli ne delita bitne slike. Preklop lastnosti ne zahteva, da bi karkoli ročno razveljavili — predpomnilnik, ki bi vrnil napačno od teh dveh, bi bil slabši od nobenega predpomnilnika
Tri naprave, en klic upodabljanja
THPDFRenderDevice je abstraktni razred z dvema članoma, ki štejeta: Kind, ki cilj poroča kot rdkBitmap, rdkDeviceContext ali rdkEnhancedMetafile, in Execute, ki ga kliče knjižnica. Tri konkretne naprave se dobavijo s HotPDF in vsaka poseduje svoj izhod drugače
THPDFBitmapRenderDevice poseduje TBitmap, dokler TakeBitmap lastništva ne prenese na vas. THPDFDeviceContextRenderDevice vzame obstoječi HDC plus širino in višino in riše naravnost vanj, kar je način upodabljanja na platno tiskalnika brez posredovanja bitne slike. THPDFMetafileRenderDevice poseduje TMetafile, dokler TakeMetafile ne prenese nanj, kar ohranja vektorsko vsebino kot vektorje za porabnike, ki jo potrebujejo
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;
Branje Kind namesto preizkušanja razreda med izvajanjem je namerno. Aplikacijska koda, ki razpošilja glede na vrsto naprave, še naprej deluje, ko je naprava ovita, okrašena ali zamenjana, koda, ki preizkuša is THPDFBitmapRenderDevice, pa ne
Kaj prenos lastništva pomeni v praksi
Pred TakeBitmap ali TakeMetafile naprava poseduje objekt in ga sprosti v svojem destruktorju. Po klicu ga posedujete vi, naprava pa ne več. Oba vzorca sta zakonita: uporabite lastnost Bitmap ali Metafile, ko mora objekt preživeti le klic upodabljanja, prevzemite pa lastništvo, ko objekt preživi napravo
Način odpovedi je običajen delphijev. Vzamete bitno sliko, sprostite napravo, pozabite sprostiti bitno sliko in imate puščanje, ki raste s številom strani — nevidno pri petstranskem preizkusu in očitno pri paketu petsto strani. Ovijte oba objekta v svoj try/finally namesto da bi ju delala, in vprašanje lastništva se odgovori samo
Prevleka prektiska in prosojnost na isti strani
Izbijanje skupine prosojnosti ostane aktivno, ko je predogled prektiska vklopljen, oboje pa je kompozitirano v isti poti zajete slike barvanja. To je pomembno, ker resnične datoteke, pripravljene za tisk, nenehno mešata oboje: skupina prosojnosti, ki drži grafiko, sedi na ozadju, katerega črna je nastavljena na prektisk, simuliranje enega brez drugega pa daje probno predlogo, ki je napačna na nov način in ne pravilna
Omejitve imejte v vidu. Predogled prektiska simulira obnašanje procesnih črnil za barve DeviceCMYK pod nadzori prektiska, navedenimi zgoraj. To je prova interakcije črnil, ne z barvo upravljana pogodbena prova: ne nadomešča delovnega toka ICC in ne pove, kaj bo dal določen stroj in material. Obravnavajte jo tako, kot jo operater predtiska obravnava v poklicnem bralniku — kot preverjanje, ki ujame napake, ki jih nihče ne ujame z gledanjem navadnega predogleda
Vgradnja prevleke v korak predleta
Uporabno mesto zanjo je ob preverjanjih, ki jih že izvajate. Predlet poroča, da je črno besedilo nastavljeno na prektisk; upodabljanje probe operaterju pokaže, kaj to pomeni na strani; oboje pa gre v isto poročilo. za spot barve, ki pogosto spremljajo prektisk v paketnem delu, sprehod skozi upodabljanje spot barv Separation in DeviceN obravnava stran barvil iste strani, zapiski o upodabljanju strani PDF v bitno sliko in o tisku naloženega PDF skozi TPrinter pa obravnavata dva cilja naprav v svoji navadni, neprobni obliki
HotPDF upodablja, prevleka in tiska naložene strani PDF iz izvorne kode VCL za Delphi in C++Builder, brez zunanjega izvajalnega okolja PDF — stran komponente HotPDF ima seznam zmogljivosti upodabljanja in preizkusno gradnjo