HotPDF renderuje učitanu PDF stranicu kroz jednu ulaznu tačku, RenderLoadedPageToDevice, a uređaj koji mu predate odlučuje da li je rezultat bitmapa, crtež na spoljašnjem kontekstu uređaja kao što je platno štampača, ili vektorski unapređeni metafajl. Postavite RenderOverprintPreview na True i isti poziv simulira CMYK overprint procesnih boja, tako da operater vidi na ekranu interakciju boja koja bi se inače pojavila samo na otisku sa mašine
Ove dve funkcije rešavaju različite probleme koji se slučajno sreću u istoj putanji koda. Apstrakcija uređaja uklanja granu gde su pregled, štampa i izvoz svaki imali svoj poziv za renderovanje sa svojim odstupanjem. Proba overprinta uklanja klasu proizvodnih grešaka gde dokument izgleda ispravno u svakom pregledaču, a silazi sa mašine pogrešno
Zašto se stranica štampa drugačije nego što se prikazuje?
Zato što je overprint instrukcija uređaju za prikazivanje, a ne operacija bojenja. Kad stranica postavi /OP ili /op na tačno u stanju grafike, ona govori RIP-u da ne izbaci boje ispod — cijan objekat nacrtan preko žute ostavlja žutu na mestu, a list pokazuje zelenu. Pregledač koji zanemaruje overprint izbacuje normalno i prikazuje cijan. Nijedno nije pogrešno po sopstvenim merilima, i to je upravo problem: ekran i mašina se ne slažu, i niko ne saznaje dok probni otisci ne stignu nazad
RenderOverprintPreview čini da HotPDF shvati instrukciju ozbiljno za DeviceCMYK bojenja kojima upravljaju /OP, /op i /OPM 1. Rezultat je pregled probe a ne pregled pregledača: crna koja overprintuje nijansu ostaje bogati prekrivač umesto da probije rupu, a dizajnerov slučajni overprint na belom tekstu postaje vidljiv kao nestajući tekst koji ć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;
Podešavanje učestvuje u identitetu keša renderovanja, u memoriji i na disku, tako da običan pregled i pregled probe nikada ne dele bitmapu. Prebacivanje svojstva ne zahteva da išta ručno poništavate — keš koji bi vrario pogrešnu od ove dve bio bi gori od nikakvog keša
Tri uređaja, jedan poziv renderovanja
THPDFRenderDevice je apstraktna klasa sa dva člana koja su važna: Kind, koji prijavljuje cilj kao rdkBitmap, rdkDeviceContext ili rdkEnhancedMetafile, i Execute, koji biblioteka poziva. Tri konkretna uređaja se isporučuju uz HotPDF, i svaki poseduje svoj izlaz na drugačiji način
THPDFBitmapRenderDevice poseduje TBitmap dok TakeBitmap ne prenese vlasništvo vama. THPDFDeviceContextRenderDevice uzima postojeći HDC plus širinu i visinu i crta direktno u njega, što je način da renderujete na platno štampača bez bitmapiranog povratnog puta. THPDFMetafileRenderDevice poseduje TMetafile dok TakeMetafile ne prenese njega, što čuva vektorski sadržaj kao vektore za potrošače kojima je to potrebno
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 umesto testiranja klase izvršavanja je namerno. Kod aplikacije koji dispječuje po vrsti uređaja nastavlja da radi kad se uređaj obavije, dekorira ili zameni, a kod koji testira is THPDFBitmapRenderDevice ne nastavlja
Šta prenos vlasništva znači u praksi
Pre TakeBitmap ili TakeMetafile, uređaj poseduje objekat i oslobađa ga u svom destruktoru. Posle poziva, vi ga posedujete, a uređaj više ne. Oba obrasca su legitima: koristite svojstvo Bitmap ili Metafile kad objekat mora preživeti samo poziv renderovanja, i preuzmite vlasništvo kad objekat preživljava uređaj
Režim neuspeha je uobičajeni Delphi režim. Uzmite bitmapu, oslobodite uređaj, zaboravite da oslobodite bitmapu, i imate curenje koje raste sa brojem stranica — nevidljivo na testu od pet stranica i očigledno na paketu od pet stotina. Obavijte oba objekta u sopstveni try/finally umesto da delite jedan, i pitanje vlasništva se samo odgovara
Proba overprinta i transparentnost na istoj stranici
Knockout grupe transparentnosti ostaje aktivan kad je pregled overprinta uključen, i oba se kompozitiraju u istoj ograničenoj putanji snimka bojenja. To je važno jer realni fajlovi spremni za štampu stalno mešaju to dvoje: grupa transparentnosti koja drži grafiku sedi na pozadini čija je crna postavljena da overprintuje, i simuliranje jednog bez drugog proizvodi probu koja je pogrešna na nov način umesto ispravna
Držite ograničenja na oku. Pregled overprinta simulira ponašanje procesnih boja za DeviceCMYK bojenja pod gore navedenim kontrolama overprinta. To je proba interakcije boja, a ne proba vođena bojom ugovornog ugovora: ne zamenjuje ICC tok rada, i ne govori vam šta će određena mašina i papir dati. Tretirajte ga onako kako preštampani operater tretira pregled overprinta u profesionalnom pregledaču — kao proveru koja hvata greške koje niko ne hvata gledanjem u običan pregled
Uklapanje probe u korak preflighta
Korisno mesto za ovo je pored provera koje već pokrećete. Prolaz preflighta prijavljuje da je crni tekst postavljen da overprintuje; renderovanje probe pokazuje operateru šta to znači na stranici; i oba idu u isti izveštaj. Za spot boje, koje često prate overprint u pakovanju, prolaz kroz renderovanje Separation i DeviceN spot boja pokriva stranu koloranata iste stranice, dok beleške o renderovanju PDF stranice u bitmapu i o štampi učitanog PDF-a kroz TPrinter pokrivaju dva ciljna uređaja u svom običnom, neprobnom obliku
HotPDF renderuje, proba i štampa učitane PDF stranice iz nativnog VCL koda za Delphi i C++Builder, bez eksterne DLL za renderovanje koja se primenjuje uz aplikaciju — stranica HotPDF komponente ima listu funkcija renderovanja i probnu verziju