Tehnički članak

CMYK overprint proba i render uređaji u HotPDF

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