Tekninen artikkeli

CMYK-overprint-vedostarkistus ja renderöintilaitteet HotPDF:ssä

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