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