Tehnični članak

Prevleka CMYK prektiska in naprave za upodabljanje v HotPDF

HotPDF upodablja naloženo stran PDF skozi eno vstopno točko, RenderLoadedPageToDevice, naprava, ki mu jo izročite, pa odloča, ali je rezultat bitna slika, risba na zunanjem kontekstu naprave, kot je platno tiskalnika, ali vektorska izboljšana meta-datoteka. Nastavite RenderOverprintPreview na True in isti klic simulira prektisk procesnih barv CMYK, tako operater vidi na zaslonu interakcijo črnil, ki bi se sicer pokazala šele na tiskovini

Ti dve zmogljivosti rešujeta različni težavi, ki se slučajno srečata v isti poti kode. Abstrakcija naprave odstranja vejo, kjer sta predogled, tisk in izvoz imeli vsak svoj klic upodabljanja s svojim odmikom. Prevleka prektiska odstranja razred proizvodnih napak, kjer dokument v vsakem bralniku izgleda pravilno in pride s stroja napačno

Zakaj se stran natisne drugače, kot se predogleda?

Ker je prektisk navodilo napravi za slikanje in ne operacija barvanja. Ko stran v grafičnem stanju nastavi /OP ali /op na resnično, RIP-u govori, da ne izbije črnil pod seboj — cianov objekt, narisán čez rumeno, pusti rumeno na mestu, na listu pa se pokaže zelena. Bralnik, ki prektisk ignorira, izbija običajno in pokaže ciano. Noben sam po sebi ni napačen in to je natanko težava: zaslon in tisk se ne strinjata in nihče ne izve, dokler ne prispejo probe

RenderOverprintPreview prisili HotPDF, da navodilo upošteva resno za barve DeviceCMYK, ki jih upravljajo /OP, /op in /OPM 1. Rezultat je predogled probe in ne predogled bralnika: črna, ki prektiska odtenek, ostane bogata prekrivka namesto da prereže luknjo, oblikovalčev nenamerni prektisk belega besedila pa postane viden kot izginjajoče besedilo, kakršno bo

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;

Nastavitev sodeluje v identiteti predpomnilnika upodabljanja, v pomnilniku in na disku, tako da navadni predogled in predogled probe nikoli ne delita bitne slike. Preklop lastnosti ne zahteva, da bi karkoli ročno razveljavili — predpomnilnik, ki bi vrnil napačno od teh dveh, bi bil slabši od nobenega predpomnilnika

Tri naprave, en klic upodabljanja

THPDFRenderDevice je abstraktni razred z dvema članoma, ki štejeta: Kind, ki cilj poroča kot rdkBitmap, rdkDeviceContext ali rdkEnhancedMetafile, in Execute, ki ga kliče knjižnica. Tri konkretne naprave se dobavijo s HotPDF in vsaka poseduje svoj izhod drugače

THPDFBitmapRenderDevice poseduje TBitmap, dokler TakeBitmap lastništva ne prenese na vas. THPDFDeviceContextRenderDevice vzame obstoječi HDC plus širino in višino in riše naravnost vanj, kar je način upodabljanja na platno tiskalnika brez posredovanja bitne slike. THPDFMetafileRenderDevice poseduje TMetafile, dokler TakeMetafile ne prenese nanj, kar ohranja vektorsko vsebino kot vektorje za porabnike, ki jo potrebujejo

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;

Branje Kind namesto preizkušanja razreda med izvajanjem je namerno. Aplikacijska koda, ki razpošilja glede na vrsto naprave, še naprej deluje, ko je naprava ovita, okrašena ali zamenjana, koda, ki preizkuša is THPDFBitmapRenderDevice, pa ne

Kaj prenos lastništva pomeni v praksi

Pred TakeBitmap ali TakeMetafile naprava poseduje objekt in ga sprosti v svojem destruktorju. Po klicu ga posedujete vi, naprava pa ne več. Oba vzorca sta zakonita: uporabite lastnost Bitmap ali Metafile, ko mora objekt preživeti le klic upodabljanja, prevzemite pa lastništvo, ko objekt preživi napravo

Način odpovedi je običajen delphijev. Vzamete bitno sliko, sprostite napravo, pozabite sprostiti bitno sliko in imate puščanje, ki raste s številom strani — nevidno pri petstranskem preizkusu in očitno pri paketu petsto strani. Ovijte oba objekta v svoj try/finally namesto da bi ju delala, in vprašanje lastništva se odgovori samo

Prevleka prektiska in prosojnost na isti strani

Izbijanje skupine prosojnosti ostane aktivno, ko je predogled prektiska vklopljen, oboje pa je kompozitirano v isti poti zajete slike barvanja. To je pomembno, ker resnične datoteke, pripravljene za tisk, nenehno mešata oboje: skupina prosojnosti, ki drži grafiko, sedi na ozadju, katerega črna je nastavljena na prektisk, simuliranje enega brez drugega pa daje probno predlogo, ki je napačna na nov način in ne pravilna

Omejitve imejte v vidu. Predogled prektiska simulira obnašanje procesnih črnil za barve DeviceCMYK pod nadzori prektiska, navedenimi zgoraj. To je prova interakcije črnil, ne z barvo upravljana pogodbena prova: ne nadomešča delovnega toka ICC in ne pove, kaj bo dal določen stroj in material. Obravnavajte jo tako, kot jo operater predtiska obravnava v poklicnem bralniku — kot preverjanje, ki ujame napake, ki jih nihče ne ujame z gledanjem navadnega predogleda

Vgradnja prevleke v korak predleta

Uporabno mesto zanjo je ob preverjanjih, ki jih že izvajate. Predlet poroča, da je črno besedilo nastavljeno na prektisk; upodabljanje probe operaterju pokaže, kaj to pomeni na strani; oboje pa gre v isto poročilo. za spot barve, ki pogosto spremljajo prektisk v paketnem delu, sprehod skozi upodabljanje spot barv Separation in DeviceN obravnava stran barvil iste strani, zapiski o upodabljanju strani PDF v bitno sliko in o tisku naloženega PDF skozi TPrinter pa obravnavata dva cilja naprav v svoji navadni, neprobni obliki

HotPDF upodablja, prevleka in tiska naložene strani PDF iz izvorne kode VCL za Delphi in C++Builder, brez zunanjega izvajalnega okolja PDF — stran komponente HotPDF ima seznam zmogljivosti upodabljanja in preizkusno gradnjo