HotPDF renderöi ladataun PDF-sivun yhden tulopaikan, RenderLoadedPageToDevice:n, kautta, ja laite jonka sille annat päättää onko tulos bitmap, piirros ulkoisella laitekontekstilla kuten tulostimen piirtoalustalla, vai vektori-tehostettu metafile. Aseta RenderOverprintPreview:ksi True ja sama kutsu simuloi CMYK-prosessiväri-overprintia, jotta operaattori näkee ruudulla sen värien vuorovaikutuksen joka muuten näkyisi vasta painoarkilla
Nämä kaksi ominaisuutta ratkovat eri ongelmia jotka sattuvat kohtaamaan samassa koodipolussa. Laiteabstraktio poistaa haaran missä esikatselu, tulostus ja vienti kukin omilla renderöintikutsuillaan ja omalla ajautumisellaan. Overprint-vedostarkistus poistaa tuotantovirheiden luokan jossa asiakirja näyttää oikealta kaikissa katselimissa ja tulee purkimesta väärin
Miksi sivu tulostuu eri tavalla kuin se esikatsellaan?
Koska overprint on käsky kuvauslaitteelle, ei maalausoperaatio. Kun sivu asettaa /OP:n tai /op:n todeksi grafiikkatilassa, se käskee RIP:iä olla pudottamatta alla olevia värejä pois — syaaninen objekti joka piirretään keltaisen päälle jättää keltaisen paikoilleen, ja arkki näyttää vihreältä. Katselin joka jättää overprintin huomiotta pudottaa normaalisti ja näyttää syaanisen. Kumikaan ei ole väärin omilla ehdollillaan, ja juuri tuo on ongelma: ruutu ja painokone ovat eri mieltä, eikä kukaan saa tietää ennen kuin vedokset palaavat
RenderOverprintPreview panee HotPDF:n ottamaan käsyn vakavasti DeviceCMYK-maalauksille joita hallitsevat /OP, /op ja /OPM 1. Tulos on vedosesikatselu katselimen esikatselun sijaan: musta joka overprintaa sävyä pysyy rikkaana peittona sen sijaan että se lävistäisi reiän, ja suunnittelijan vahingossa tekemä overprint valkoiselle tekstille näkyy katoavana tekstinä jollaiseksi se tulee
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;
Asetus osallistuu renderöintivälimuistin identiteettiin, muistissa ja levyllä, joten tavallinen esikatselu ja vedosesikatselu eivät koskaan jaa bitmapia. Ominaisuuden kytkeminen ei vaadi sinua mitätöimään mitään käsin — välimuisti joka palautti väärän näistä kahdesta olisi pahempi kuin ei välimuistia lainkaan
Kolme laitetta, yksi renderöintikutsu
THPDFRenderDevice on abstrakti luokka jolla on kaksi jäsentä jotka merkitsevät: Kind, joka raportoi kohteen arvoina rdkBitmap, rdkDeviceContext tai rdkEnhancedMetafile, ja Execute, jota kirjasto kutsuu. Kolme konkreettista laitetta toimitetaan HotPDF:n mukana, ja jokainen omistaa tulosteensa eri tavalla
THPDFBitmapRenderDevice omistaa TBitmap:in kunnes TakeBitmap siirtää omistuksen sinulle. THPDFDeviceContextRenderDevice ottaa olemassa olevan HDC:n lisäksi leveyden ja korkeuden ja piirtää suoraan siihen, mikä on se miten renderöit tulostimen piirtoalustalle ilman bitmap-menestystä. THPDFMetafileRenderDevice omistaa TMetafile:n kunnes TakeMetafile siirtää sen, mikä pitää vektorisisällön vektoreina kuluttajille jotka tarvitsevat sitä
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;
Kind:n lukeminen suoritusluokan testaamisen sijaan on tahallaan tehty. Sovelluskoodi joka lähettää laitelajin mukaan pitää toimia kun laite kääritään, koristellaan tai korvataan, ja koodi joka testaa is THPDFBitmapRenderDevice ei
Mitä omistuksen siirto käytännössä tarkoittaa
Ennen TakeBitmap:iä tai TakeMetafile:a laite omistaa olion ja vapauttaa sen destruktessorissaan. Kutsun jälkeen sinä omistat sen eikä laite enää. molemmat mallit ovat sallittuja: käytä Bitmap- tai Metafile-ominaisuutta kun olion tarvitsee vain elää renderöintikutsua pidemmälle, ja ota omistus kun olio elää laitetta pidemmälle
Epäonnistumistapa on tavallinen Delphi-tyyppinen. Ota bitmap, vapauta laite, unohda vapauttaa bitmap, ja sinulla on vuoto joka kasvaa sivumäärän kanssa — näkymätön viiden sivun testissä ja ilmeinen viidensadan sivun erässä. Kieto molemmat oliot omiin try/finally-loihinsa yhteisen sijaan, ja omistuskysymys vastaa itse itsensä
Overprint-vedostarkistus ja läpinäkyvyys samalla sivulla
Läpinäkyvyysryhmän knockout pysyy aktiivisena kun overprint-esikatselu on päällä, ja molemmat kompositoidaan samassa rajoitetun maalauskuvan polussa. Tämä merkitsee koska todelliset painovalmiit tiedostot sekoittavat kahta jatkuvasti: läpinäkyvyysryhmä joka pitää grafiikan istuu taustalla jonka musta on asetettu overprintiksi, ja toisen simuloiminen ilman toista tuottaa vedoksen joka on väärin uudella tavalla eikä oikein
Pidä rajat mielessä. Overprint-esikatselu simuloi prosessivärien käytöstä DeviceCMYK-maalauksille yllä nimettyjen overprint-säätimien alaisuudessa. Se on vedos värien vuorovaikutuksesta, ei värihallittu sopimusvedos: se ei korvaa ICC-työnkulkua, eikä se kerro mitä tietty painokone ja paperi tuottavat. Suhtaudu siihen niin kuin prepress-operaattori suhtautuu overprint-esikatseluun ammattikatselimessa — tarkistuksena joka ottaa kiinni virheet joita kukaan ei ota kiinni katsomalla tavallista esikatselua
Vedostarkistuksen sijoittaminen eskelennusaskelen yhteyteen
Hyödyllisin paikka tälle on jo ajamiesi tarkistusten vieressä. Eskelennusläpäisy raportoi että musta teksti on asetettu overprintiksi; vedosrenderöinti näyttää operaattorille mitä se tarkoittaa sivulla; ja molemmat menevät samaan raporttiin. Spot-väreille jotka usein seuraavat overprintia pakkaustyössä, artikkeli Separation- ja DeviceN-spotvärien renderöinti käsittelee saman sivun väriaineiden puolta, kun taas muistiinpanot PDF-sivun renderöinti bitmapiksi ja ladatun PDF:n tulostus TPrinterin läpi käsittelevät kahta laitekohdetta niiden tavallisessa, ei-vedostusmuodossa
HotPDF renderöi, todistaa ja tulostaa ladattuja PDF-sivuja natiivista VCL-koodista Delphille ja C++Builderille, ilman ulkoista renderöintidll:iä jonka sovelluksen ohella pitäisi toimitaa — HotPDF-komponenttisivulta löytyy renderöintiominaisuusluettelo ja kokeiluversio