HotPDF merender halaman PDF yang dimuat melalui satu titik masuk, RenderLoadedPageToDevice, dan perangkat yang Anda serahkan kepadanya memutuskan apakah hasilnya bitmap, gambar pada konteks perangkat eksternal seperti kanvas printer, atau enhanced metafile vektor. Setel RenderOverprintPreview ke True dan panggilan yang sama mensimulasikan overprint tinta proses CMYK, sehingga operator melihat di layar interaksi tinta yang sebaliknya hanya muncul pada lembar mesin cetak
Kedua fitur itu memecahkan masalah berbeda yang kebetulan bertemu di jalur kode yang sama. Abstraksi perangkat menghilangkan cabang di mana pratinjau, cetak dan ekspor masing-masing memiliki panggilan renderernya sendiri dengan drift tersendiri. Proofing overprint menghilangkan kelas kesalahan produksi di mana dokumen terlihat benar di setiap viewer dan keluar dari mesin cetak salah
Kenapa halaman tercetak berbeda dari pratinjaunya?
Karena overprint adalah instruksi ke perangkat pencitraan, bukan operasi paint. Ketika halaman menetapkan /OP atau /op true dalam graphics state, ia memberi tahu RIP untuk tidak mengetik-keluar tinta di bawahnya — objek cyan yang digambar di atas kuning membiarkan kuning tetap di tempat, dan lembar menampilkan hijau. Viewer yang mengabaikan overprint mengetik-keluar secara normal dan menampilkan cyan. Tidak satu pun salah menurut syaratnya sendiri, dan itulah masalahnya: layar dan mesin cetak tidak setuju, dan tidak ada yang mengetahuinya sampai proof kembali
RenderOverprintPreview membuat HotPDF mengambil instruksi itu secara serius untuk cat DeviceCMYK yang diatur oleh /OP, /op dan /OPM 1. Hasilnya adalah pratinjau proof alih-alih pratinjau viewer: hitam yang overprint di atas tint tetap menjadi overlay kaya alih-alih melubangi, dan overprint tidak sengaja desainer pada teks putih menjadi terlihat sebagai teks yang menghilang seperti yang akan terjadi
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;
Pengaturan itu berpartisipasi dalam identitas render-cache, di memori dan di disk, jadi pratinjau normal dan pratinjau proof tidak pernah berbagi bitmap. Mengaktifkan properti tidak mengharuskan Anda membatalkan validasi apa pun secara manual — cache yang mengembalikan salah satu dari kedua ini akan lebih buruk daripada tidak ada cache sama sekali
Tiga perangkat, satu panggilan render
THPDFRenderDevice adalah kelas abstrak dengan dua anggota yang penting: Kind, yang melaporkan target sebagai rdkBitmap, rdkDeviceContext atau rdkEnhancedMetafile, dan Execute, yang dipanggil library. Tiga perangkat konkret dikirim dengan HotPDF, dan masing-masing memiliki outputnya secara berbeda
THPDFBitmapRenderDevice memiliki TBitmap sampai TakeBitmap mentransfer kepemilikan ke Anda. THPDFDeviceContextRenderDevice mengambil HDC yang ada plus lebar dan tinggi dan menggambar langsung ke dalamnya, yang merupakan cara Anda merender ke kanvas printer tanpa perjalanan bolak-balik bitmap. THPDFMetafileRenderDevice memiliki TMetafile sampai TakeMetafile mentransfernya, yang menjaga konten vektor tetap sebagai vektor untuk konsumen yang membutuhkannya
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;
Membaca Kind alih-alih menguji kelas runtime adalah disengaja. Kode aplikasi yang men-dispatch pada jenis perangkat tetap berfungsi ketika perangkat dibungkus, dihias, atau diganti, dan kode yang menguji is THPDFBitmapRenderDevice tidak
Apa arti transfer kepemilikan dalam praktik
Sebelum TakeBitmap atau TakeMetafile, perangkat memiliki objek dan membebaskannya di destrukturnya. Setelah panggilan itu, Anda yang memilikinya dan perangkat tidak lagi. Kedua pola sah: gunakan properti Bitmap atau Metafile ketika objek hanya harus hidup lebih lama dari panggilan render, dan ambil kepemilikan ketika objek hidup lebih lama dari perangkat
Mode kegagalannya adalah mode Delphi biasa. Ambil bitmap, bebaskan perangkat, lupa membebaskan bitmap, dan Anda memiliki kebocoran yang tumbuh dengan jumlah halaman — tidak terlihat pada pengujian lima halaman dan jelas pada batch lima ratus halaman. Bungkus kedua objek dalam try/finally masing-masing alih-alih berbagi satu, dan pertanyaan kepemilikan menjawab dirinya sendiri
Proofing overprint dan transparansi pada halaman yang sama
Transparency-group knockout tetap aktif ketika pratinjau overprint menyala, dan keduanya dikomposit dalam jalur snapshot paint terbatas yang sama. Ini penting karena file siap-cetak nyata mencampur keduanya terus-menerus: grup transparansi yang menahan karya seni berada di atas latar belakang yang hitamnya disetel ke overprint, dan mensimulasikan satu tanpa yang lain menghasilkan proof yang salah dengan cara baru alih-alih benar
Perhatikan batasannya. Pratinjau overprint mensimulasikan perilaku tinta proses untuk cat DeviceCMYK di bawah kontrol overprint yang disebut di atas. Itu adalah proof interaksi tinta, bukan contract proof yang dikelola warna: ia tidak menggantikan workflow ICC, dan tidak memberi tahu apa yang akan dihasilkan oleh mesin cetak dan stok tertentu. Perlakukan seperti cara operator prepress memperlakukan pratinjau overprint dalam viewer profesional — sebagai pemeriksaan yang menangkap kesalahan yang tidak ditangkap siapa pun dengan melihat pratinjau normal
Memasang proofing ke dalam langkah preflight
Tempat yang berguna untuk ini di sebelah pemeriksaan yang sudah Anda jalankan. Pass preflight melaporkan bahwa teks hitam disetel ke overprint; render proof menunjukkan operator apa artinya pada halaman; dan keduanya masuk ke laporan yang sama. Untuk spot colour, yang sering menyertai overprint dalam pekerjaan packaging, panduan rendering spot colour Separation dan DeviceN membahas sisi colorant dari halaman yang sama, sedangkan catatan tentang merender halaman PDF ke bitmap dan tentang mencetak PDF yang dimuat melalui TPrinter membahas dua target perangkat dalam bentuk polosnya yang non-proof
HotPDF merender, mem-proof, dan mencetak halaman PDF yang dimuat dari kode VCL native untuk Delphi dan C++Builder, tanpa DLL rendering eksternal untuk dideploy di samping aplikasi — halaman komponen HotPDF memiliki daftar fitur rendering dan build trial