Techninis straipsnis

CMYK perdažymo įrodymas ir atvaizdavimo įrenginiai HotPDF

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