HotPDF renderira učitanu PDF stranicu kroz jednu ulaznu točku, RenderLoadedPageToDevice, a uređaj koji mu predate odlučuje je li rezultat bitmapa, crtež na vanjskom kontekstu uređaja poput platna pisača ili vektorski poboljšani metafile. Postavite RenderOverprintPreview na True i isti poziv simulira CMYK overprint procesnih boja, pa operater vidi na zaslonu međudjelovanje boja koje bi se inače pojavilo tek na tiskovnom listu
Te dvije značajke rješavaju različite probleme koji se slučajno susreću u istom putu koda. Apstrakcija uređaja uklanja granu u kojoj su pretpregled, ispis i izvoz svaki imali vlastiti poziv renderiranja s vlastitim odstupanjem. Proba overprinta uklanja klasu proizvodne pogreške u kojoj dokument izgleda ispravno u svakom pregledniku, a s tiskare izlazi pogrešno
Zašto se stranica ispisuje drukčije nego što se pretpregledava?
Zato što je overprint uputa uređaju za prikazivanje, a ne operacija bojenja. Kad stranica postavi /OP ili /op na istinito u grafičkom stanju, ona kaže RIP-u da ne izbije boje ispod, cijan objekt nacrtan preko žute ostavlja žutu na mjestu, a list prikazuje zelenu. Preglednik koji zanemari overprint normalno izbija i prikazuje cijan. Nijedno nije pogrešno po vlastitim mjerilima, i upravo je to problem: zaslon i tiskara se ne slažu, a nitko ne saznaje dok probe ne stignu natrag
RenderOverprintPreview čini da HotPDF shvati uputu ozbiljno za DeviceCMYK ispune kojima upravljaju /OP, /op i /OPM 1. Rezultat je pretpregled probe, a ne pretpregled preglednika: crna koja overprinta nijansu ostaje bogati sloj umjesto da probije rupu, a dizajnerov slučajni overprint na bijelom tekstu postaje vidljiv kao nestajući tekst kakav će i biti
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;
Postavka sudjeluje u identitetu predmemorije renderiranja, u memoriji i na disku, pa normalan pretpregled i pretpregled probe nikad ne dijele bitmapu. Prebacivanje svojstva ne zahtijeva da ručno išta poništite; predmemorija koja bi vratila pogrešnu od ovih dviju bila bi gora od nepostojanja predmemorije
Tri uređaja, jedan poziv renderiranja
THPDFRenderDevice apstraktan je razred s dvjema stavkama koje su važne: Kind, koja prijavljuje cilj kao rdkBitmap, rdkDeviceContext ili rdkEnhancedMetafile, te Execute, koji knjižnica poziva. Tri konkretna uređaja stižu s HotPDF-om i svaki posjeduje svoj izlaz na drugačiji način
THPDFBitmapRenderDevice posjeduje TBitmap dok TakeBitmap ne prenese vlasništvo vama. THPDFDeviceContextRenderDevice preuzima postojeći HDC te širinu i visinu i crta izravno u njega, što je način da renderirate na platno pisača bez bitmapiranog poslužiteljskog kruga. THPDFMetafileRenderDevice posjeduje TMetafile dok TakeMetafile ne prenese njegovo vlasništvo, što zadržava vektorski sadržaj kao vektorski za potrošače koji ga trebaju
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;
Čitanje Kind umjesto testiranja razreda u vrijeme izvođenja je namjerno. Kod aplikacije koji odašilje prema vrsti uređaja nastavlja raditi kad je uređaj omotan, ukrašen ili zamijenjen, a kod koji testira is THPDFBitmapRenderDevice ne nastavlja
Što prijenos vlasništva znači u praksi
Prije TakeBitmap ili TakeMetafile, uređaj posjeduje objekt i oslobađa ga u svom destruktoru. Nakon poziva, vi ga posjedujete, a uređaj više ne. Oba obrasca su legitimna: koristite svojstvo Bitmap ili Metafile kad objekt treba preživjeti samo poziv renderiranja, a preuzmite vlasništvo kad objekt nadživi uređaj
Način neuspjeha je uobičajeni Delphi. Preuzmite bitmapu, oslobodite uređaj, zaboravite osloboditi bitmapu, i imate curenje koje raste s brojem stranica, nevidljivo na probi od pet stranica i očigledno na seriji od petsto. Omotajte oba objekta u vlastiti try/finally umjesto da dijelite jedan, i pitanje vlasništva samo se odgovara
Overprint proba i prozirnost na istoj stranici
Izbijanje grupe prozirnosti ostaje aktivno kad je pretpregled overprinta uključen, i oboje se kompozitiraju u istom ograničenom putu snimke bojenja. To je važno jer stvarne datoteke spremne za tisak stalno miješaju oboje: grupa prozirnosti koja nosi grafiku sjedi na pozadini čija je crna postavljena na overprint, a simuliranje jednog bez drugog proizvodi probu koja je pogrešna na novi način umjesto da bude ispravna
Držite ograničenja na oku. Pretpregled overprinta simulira ponašanje procesnih boja za DeviceCMYK ispune pod gore navedenim kontrolama overprinta. To je proba međudjelovanja boja, a ne kolorno upravljana ugovorna proba: ne zamjenjuje ICC cjevovod i ne govori što će određena tiskara i podloga dati. Tretirajte ga onako kako pretpisnički operater tretira pretpregled overprinta u profesionalnom pregledniku, kao provjeru koja hvata pogreške koje nitko ne hvata gledanjem običnog pretpregleda
Uklapanje probe u korak preleta
Korisno mjesto za ovo jest uz provjere koje već pokrećete. Prolaz preleta prijavljuje da je crni tekst postavljen na overprint; renderiranje probe pokazuje operateru što to znači na stranici; i oboje ide u isto izvješće. Za spot boje, koje u pakiranjima često prate overprint, prikaz renderiranja Separation i DeviceN spot boja pokriva stranu nositelja boja iste stranice, dok bilješke o renderiranju PDF stranice u bitmapu i o ispisivanju učitanog PDF-a kroz TPrinter pokrivaju dvije ciljne uređaje u njihovom običnom, neprobom obliku
HotPDF renderira, proba i ispisuje učitane PDF stranice iz izvornog VCL koda za Delphi i C++Builder, bez vanjske DLL za renderiranje koju treba rasporediti uz aplikaciju. Na stranici HotPDF komponente nalazi se popis značajki renderiranja i probna izvedba