HotPDF atvaizduoja įkelto PDF puslapį per vieną įėjimo tašką, RenderLoadedPageToDevice, ir įrenginys, kurį jam perduodate, sprendžia, ar rezultatas yra bitmapas, piešinys išoriniame įrenginio kontekste, pvz., spausdintuvo drobėje, ar vektorinis patobulintas metafailas. Nustatykite RenderOverprintPreview į True, ir tas pats kvietimas modeliuoja CMYK procesinių dažų perdažymą, kad operatorius ekrane matytų dažų sąveiką, kuri kitaip pasirodytų tik spaudos lape
Šios dvi savybės sprendžia skirtingas problemas, kurios atsitiktinai susitinka tame pačiame kodo kelyje. Įrenginio abstrakcija pašalina šaką, kur peržiūra, spausdinimas ir eksportavimas turėjo po savo atvaizdavimo kvietimą su savo nuokrypiu. Perdažymo įrodymas pašalina gamybos klaidų klasę, kai dokumentas atrodo teisingas kiekviename žiūryklėje, o nuo spausdinimo mašinos ateina neteisingas
Kodėl puslapis spausdinasi kitaip nei peržiūrima?
Nes perdažymas yra nurodymas vaizdavimo įrenginiui, o ne dažymo operacija. Kai puslapis grafinėje būsenoje nustato /OP arba /op teisingu, jis sako RIP neišmušinėti dažų po juo — žydras objektas, nubraižytas ant geltono, palieka geltoną vietoje, ir lape matosi žalia. Žiūryklė, ignoruojanti perdažymą, išmuša įprastai ir rodo žydrą. Nė vienas nėra blogas savomis sąlygomis, ir būtent tai yra problema: ekranas ir spausdinimo mašina nesutaria, ir niekas nesužino, kol negrįžta įrodymai
RenderOverprintPreview verčia HotPDF imti nurodymą rimtai DeviceCMYK dažams, valdomiems /OP, /op ir /OPM 1. Rezultatas yra įrodymo peržiūra, o ne žiūryklės peržiūra: juodas, perdažantis atspalvį, lieka turtingu perdengimu užuot išmušęs skylę, o dizainerio atsitiktinis perdažymas ant balto teksto tampa matomas kaip dingstantis tekstas, koks jis ir bus
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;
Nustatymas dalyvauja atvaizdavimo podėlio identitete, atmintyje ir diske, todėl įprasta peržiūra ir įrodymo peržiūra niekada nedalijasi bitmapu. Nuosavybės perjungimas nereikalauja nieko invaliduoti rankiniu būdu — podėlis, grąžinęs blogą iš šių dviejų, būtų blogesnis už jokį podėlį
Trys įrenginiai, vienas atvaizdavimo kvietimas
THPDFRenderDevice yra abstrakti klasė su dviem svarbiais nariais: Kind, pranešančiu tikslą kaip rdkBitmap, rdkDeviceContext arba rdkEnhancedMetafile, ir Execute, kurį kviečia biblioteka. Su HotPDF pristatomi trys konkretūs įrenginiai, ir kiekvienas valdo savo išvestį skirtingai
THPDFBitmapRenderDevice valdo TBitmap, kol TakeBitmap perduoda nuosavybę jums. THPDFDeviceContextRenderDevice ima esamą HDC su pločiu ir aukščiu ir piešia tiesiai į jį — taip atvaizduojate ant spausdintuvo drobės be bitmapo kelione. THPDFMetafileRenderDevice valdo TMetafile, kol TakeMetafile perduoda jį — tai išlaiko vektorinį turinį kaip vektorius vartotojams, kuriems to reikia
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 skaitymas, o ne vykdymo klasės tikrinimas, yra sąmoningas. Programos kodas, išskirstantis pagal įrenginio rūšį, toliau veikia, kai įrenginys apgaubiamas, dekoruojamas ar pakeičiamas, o kodas, tikrinantis is THPDFBitmapRenderDevice — ne
Ką nuosavybės perdavimas reiškia praktiškai
Prieš TakeBitmap arba TakeMetafile įrenginys valdo objektą ir atlaisvina jį savo destruktoriuje. Po kvietimo jūs valdote jį, o įrenginys — ne. Abi schemos teisėtos: naudokite Bitmap arba Metafile savybę, kai objektas turi išgyventi tik atvaizdavimo kvietimą, ir perimkite nuosavybę, kai objektas išgyvena įrenginį
Trikties pobūdis yra įprastinis Delphi. Paimkite bitmapą, atlaisvinkite įrenginį, pamirškite atlaisvinti bitmapą, ir turite nuotėkį, augantį su puslapių skaičiumi — nematomą penkių puslapių teste ir akivaizdų penkių šimtų puslapių pakete. Apgaubkite abu objektus atskirais try/finally, užuot dalijęsi vienu, ir nuosavybės klausimas atsako pats save
Perdažymo įrodymas ir permatomumas tame pačiame puslapyje
Permatomumo grupės išmušimas lieka aktyvus, kai perdažymo peržiūra įjungta, ir abu komponuojami tame pačiame ribotame dažymo momentinės nuotraukos kelyje. Tai svarbu, nes realūs spaudai paruošti failai nuolat maišo abu: permatomumo grupė, laikanti grafiką, sėdi ant fono, kurio juoda yra nustatyta perdažyti, ir vieno modeliavimas be kito gamina įrodymą, kuris yra neteisingas nauju būdu, o ne teisingas
Nepraraskite iš akių ribų. Perdažymo peržiūra modeliuoja procesinių dažų elgseną DeviceCMYK dažams, valdomiems aukščiau paminėtų perdažymo valdiklių. Tai yra dažų sąveikos įrodymas, o ne spalvomis valdomas sutartinis įrodymas: jis nepakeičia ICC darbo eigos ir nepasako, ką duos konkreti spausdinimo mašina ir popierius. Traktuokite jį taip, kaip priešspaudos operatorius traktuoja perdažymo peržiūrą profesinėje žiūryklėje — kaip patikrą, pagaunančią klaidas, kurių niekas nepagauna žiūrėdamas įprastą peržiūrą
Įrodymų įtaisymas į skrydžio prieš tai žingsnį
Naudinga vieta tam yra šalia tikrinimų, kuriuos jau vykdote. Skrydžio prieš tai perdavimas praneša, kad juodas tekstas nustatytas perdažyti; įrodymo atvaizdavimas parodo operatoriui, ką tai reiškia puslapyje; ir abu patenka į tą pačią ataskaitą. Dėl spotinių spalvų, kurios dažnai lydi perdažymą pakavimo darbuose, Separation ir DeviceN spotinių spalvų atvaizdavimo aprašymas padengia to paties puslapio dažiklio pusę, o PDF puslapio atvaizdavimo į bitmapą ir įkelto PDF spausdinimo per TPrinter pastabos padengia abu įrenginių tikslus jų paprasta, ne įrodymo forma
HotPDF atvaizduoja, įrodinėja ir spausdina įkeltus PDF puslapius iš natyvaus VCL kodo, skirto Delphi ir C++Builder, be išorinio atvaizdavimo DLL, diegiamo šalia programos — HotPDF komponento puslapyje yra atvaizdavimo savybių sąrašas ir bandomoji versija