Artikel Teknis

Proofing Overprint CMYK dan Perangkat Render di HotPDF

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