Teknik Makale

HotPDF ile CMYK Baskı-Üstü Proofing ve İşleme Aygıtları

HotPDF yüklenen bir PDF sayfasını tek bir giriş noktası olan RenderLoadedPageToDevice üzerinden işler ve ona teslim ettiğiniz aygıt sonucun bir bit eşlem, bir yazıcı tuvali gibi dış bir aygıt bağlamında çizim mi yoksa vektör geliştirilmiş meta dosyası mı olduğuna karar verir. RenderOverprintPreview'i True yapın ve aynı çağrı CMYK işlem mürekkebi baskı-üstünü taklit eder, dolayısıyla bir operatör ekranda aksi takdirde yalnızca baskı makinesi çıktısında görünecek olan mürekkep etkileşimini görür

Bu iki özellik tesadüfen aynı kod yolunda buluşan farklı sorunları çözer. Aygıt soyutlaması, önizleme, yazdırma ve dışa aktarımın her birinin kendi kayması olan kendi işleme çağrısına sahip olduğu dalı kaldırır. Baskı-üstü proofing, bir belgenin her görüntüleyicide doğru görünmesi ve baskı makinesinden yanlış çıkması sınıfı üretim hatasını kaldırır

Bir sayfa neden önizlemesinden farklı yazdırılır?

Çünkü baskı-üstü, bir boyama işlemi değil, görüntüleme aygıtına bir yönergedir. Bir sayfa grafik durumunda /OP veya /op'i true yaptığında, RIP'e altındaki mürekkepleri dışarı itmemesini söyler; sarı üzerine çizilen bir camgöbeği nesne sarıyı yerinde bırakır ve kağıt yeşil gösterir. Baskı-üstünü yok sayan bir görüntüleyici normal olarak dışarı iter ve camgöbeği gösterir. Hiçbiri kendi başına yanlış değildir ve sorun tam olarak budur: ekran ile baskı makinesi anlaşmaz ve kimse proovalar geri gelene kadar öğrenemez

RenderOverprintPreview, HotPDF'in /OP, /op ve /OPM 1 tarafından denetlenen DeviceCMYK boyamaları için yönergeyi ciddiye almasını sağlar. Sonuç bir görüntüleyici önizlemesi değil proof önizlemesidir: bir renk tonunun üzerine baskı yapan siyah, bir delik açmak yerine zengin bir örtü olarak kalır ve tasarımcının beyaz metindeki yanlışlıkla baskı-üstü yapması, olacağı gibi kaybolan metin olarak görünür hâle gelir

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;

Ayar, bellekte ve diskte işleme önbelleği kimliğine katılır, dolayısıyla normal bir önizleme ile proof önizlemesi asla bir bit eşlem paylaşmaz. Özelliği açıp kapatmak hiçbir şeyi elle geçersiz kılmayı gerektirmez; bu ikisinün yanlış olanını döndüren bir önbellek hiç önbellek olmamasından daha kötü olurdu

Üç aygıt, tek işleme çağrısı

THPDFRenderDevice, önemli iki üyesi olan soyut bir sınıftır: hedefi rdkBitmap, rdkDeviceContext veya rdkEnhancedMetafile olarak raporlayan Kind ve kitaplığın çağırdığı Execute. HotPDF ile birlikte üç somut aygıt gelir ve her biri çıktısına farklı sahiptir

THPDFBitmapRenderDevice, TakeBitmap sahipliği size devredene dek bir TBitmap'e sahiptir. THPDFDeviceContextRenderDevice var olan bir HDC artı genişlik ve yükseklik alır ve doğrudan içine çizer; bir yazıcı tuvaline bit eşlem gidiş-dönüşü olmadan nasıl işleyeceğiniz budur. THPDFMetafileRenderDevice, TakeMetafile sahipliği devredene dek bir TMetafile'a sahiptir; bu da vektör içeriği ihtiyaç duyan tüketiciler için vektör olarak korur

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;

Sınıfı çalışma zamanında denetlemek yerine Kind'ı okumak kasıtlıdır. Aygıt türüne göre dağıtım yapan uygulama kodu, bir aygıt sarıldığında, süslendiğinde veya değiştirildiğinde çalışmaya devam eder ve is THPDFBitmapRenderDevice denetleyen kod etmez

Sahiplik aktarımı uygulamada ne anlama gelir?

TakeBitmap veya TakeMetafile'dan önce aygıt nesneye sahiptir ve onu yıkıcısında serbest bırakır. Çağrıdan sonra siz sahip olursunuz ve aygıt artık olmaz. Her iki desen de meşrudur: nesnenin yalnızca işleme çağrısından uzun yaşaması gerektiğinde Bitmap veya Metafile özelliğini kullanın ve nesne aygıttan uzun yaşayacağında sahipliği devralın

Başarısızlık kipi sıradan Delphi olanıdır. Bit eşlemi devralın, aygıtı serbest bırakın, bit eşlemi serbest bırakmayı unutun ve sayfa sayısıyla büyüyen bir sızıntınız olur; beş sayfalık bir testte görünmez ve beş yüz sayfalık bir toplu işte bariz. İki nesneyi paylaşımlı bir try/finally yerine kendi try/finally'lerine sarın ve sahiplik sorusu kendiliğinden yanıtlanır

Aynı sayfada baskı-üstü proofing ve saydamlık

Baskı-üstü önizlemesi açıkken saydamlık grubu dışarı-itme etkin kalır ve ikisi de aynı sınırlı boyama anlık görüntü yolunda birleştirilir. Bu önemlidir çünkü gerçek baskıya hazır dosyalar ikisini sürekli karıştırır: yapıt taşıyan bir saydamlık grubu, siyahı baskı-üstüne ayarlanmış bir arka plan üzerinde durur ve birini diğeri olmadan taklit etmek, doğru yerine yeni bir biçimde yanlış olan bir proof üretir

Sınırları gözden uzak tutmayın. Baskı-üstü önizlemesi, yukarıda adı geçen baskı-üstü denetimleri altındaki DeviceCMYK boyamaları için işlem mürekkebi davranışını taklit eder. Bu, mürekkep etkileşiminin bir proofudur, renk yönetimli bir sözleşme proofu değildir: bir ICC akışının yerini almaz ve belirli bir baskı makinesi ve kağıtla ne sonuç vereceğini söylemez. Ona bir ön baskı operatörünün profesyonel bir görüntüleyicideki baskı-üstü önizlemesine davrandığı gibi davranın; normal bir önizlemeye bakarak kimsenin yakalayamayacağı hataları yakalayan denetim olarak

Proofing'i bir preflight adımına oturtmak

Bunun için yararlı yer, zaten çalıştırdığınız denetimlerin yanıdır. Bir preflight geçişi siyah metnin baskı-üstüne ayarlandığını raporlar; bir proof işleme bir operatöre bunun sayfada ne anlama geldiğini gösterir; ve ikisi aynı rapora girer. Ambalaj işinde sıklıkla baskı-üstüne eşlik eden spot renkler için Separation ve DeviceN spot renk işleme yazısı aynı sayfanın renklendirici tarafını ele alırken, bir PDF sayfasını bit eşleme işleme ve yüklenen bir PDF'i TPrinter üzerinden yazdırma notları iki aygıt hedefini düz, proof olmayan biçimleriyle ele alır

HotPDF, Delphi ve C++Builder için yerel VCL kodundan yüklenen PDF sayfalarını işler, proofer ve yazdırır; uygulamanın yanına dağıtılacak harici bir işleme DLL'i yoktur; HotPDF bileşeni sayfası işleme özellik listesini ve bir deneme yapısını içerir