Artikel Teknis

Mengonversi PDF ke Satu Ruang Warna di Delphi

RecolorDocument memindahkan seluruh PDF ke satu ruang warna, dan RecolorPage melakukan hal yang sama untuk satu halaman. Keduanya menerima 1 untuk grayscale, 2 untuk RGB dan 3 untuk CMYK, dan mengembalikan berapa banyak warna yang dikonversi. Geometri, teks dan gambar tetap persis di tempat semula; hanya warna yang berubah

Inilah operasi yang Anda butuhkan sebelum mengirim pekerjaan ke mesin cetak yang mengharapkan satu ruang, atau ketika dokumen berwarna harus menjadi grayscale tanpa diregenerasi. Alternatifnya — membangun ulang dokumen dari data sumbernya di ruang target — hanya tersedia ketika Anda masih memiliki data sumber, yang untuk apa pun yang diterima dari luar tidak Anda miliki

Apa yang dikonversi, dan dalam urutan apa

Operator warna pertama: fill dan stroke yang ditetapkan halaman saat menggambar. Warna yang sudah berada di ruang target dibiarkan, jadi halaman yang warnanya tidak perlu berubah mempertahankan byte aslinya alih-alih ditulis ulang ke nilai identik. Properti itu lebih penting dari yang terdengar pada dokumen besar, karena objek yang tidak tersentuh tetap tidak tersentuh di file

Gambar datang berikutnya, dan itulah bagian yang dulu hilang. Dokumen yang diubah ke grayscale hanya dengan operatornya yang dikonversi masih menunjukkan gambar berwarna pada halaman grayscale, yang lebih buruk daripada salah satu ekstrem. Gambar dikonversi ketika membawa delapan bit per komponen, ruang warna device, dan baik tanpa kompresi maupun Flate biasa

Gambar indexed dikonversi melalui tabel warnanya: palet dikonversi dan setiap sampel mempertahankan indeks yang sudah dimilikinya. Itu mencakup gambar palet yang biasanya disimpan sebagai cuplikan layar atau grafik, dan mengonversinya apa pun sampelnya dikemas atau dikompresi, karena sampelnya tidak pernah berubah

var
  Lib: TPDFlib;
  Converted: Integer;
begin
  Lib := TPDFlib.Create;
  try
    Lib.LoadFromFile('brochure.pdf', '');
    Converted := Lib.RecolorDocument(1);       // 1 grey, 2 RGB, 3 CMYK
    Log(Format('%d colours converted', [Converted]));
    Lib.SaveToFile('brochure-grey.pdf');
  finally
    Lib.Free;
  end;
end;

Kenapa JPEG dibiarkan?

Karena mengonversi warnanya berarti me-re-encode, dan me-re-encode adalah operasi berbeda dengan konsekuensi berbeda. Gambar JPEG atau fax mempertahankan byte-nya sendiri: dekode, konversi, dan kompresi ulang akan mengubah data gambar itu sendiri, memperkenalkan generasi kedua artefak lossy, dan mengubah ukuran file dengan cara yang tidak diminta pemanggil

Soft mask dan stencil mask dibiarkan karena alasan berbeda. Keduanya dibaca sebagai cakupan alih-alih sebagai warna, dan mengonversi salah satunya akan membuat halaman menampilkan mask sebagai gambar — mask transparansi dirender sebagai karya seni grayscale di atas konten yang seharusnya dibentuknya. Membiarinya bukan batasan yang harus diakali; itu adalah hasil yang benar

Warna yang ditetapkan melalui ruang ICCBased, Separation, Indexed atau Pattern juga dibiarkan apa adanya di tingkat operator. Mengonversi itu tanpa membaca profilnya akan mengubah tampilan halaman alih-alih mempertahankannya, dan operasi pewarnaan ulang yang seluruh janjinya adalah pelestarian tidak boleh mulai menebak-nebak profil

Gradien dikonversi dengan stop di belakangnya

Gradien adalah ruang warna plus fungsi yang menghasilkan warna di dalamnya, dan mengonversi satu tanpa yang lain menghasilkan omong kosong — gradien yang dikonversi yang stop-nya ditinggalkan terbaca sebagai saluran yang keliru dianggap level grayscale, yang pada halaman terlihat seperti pita warna yang sepenuhnya salah. Ruang warna gradien dan stop di belakangnya bergerak bersama

Gradien ditemukan di mana pun ia berada: diberikan objek sendiri, ditulis di dalam pattern yang melukisnya, atau berada di shading resources halaman. Cakupan itu penting karena alat desain mendistribusikannya secara berbeda, dan konverter yang hanya menangani satu penempatan akan meninggalkan dokumen setengah dikonversi tanpa pola yang jelas pada kegagalan

Dua jenis sengaja dibiarkan apa adanya. Gradien yang dibangun dari fungsi sampled atau PostScript mempertahankan definisinya sendiri, begitu pula jenis mesh, yang membawa warnanya dalam stream alih-alih dalam fungsi. Menulis ulang keduanya adalah operasi berbeda dari mengonversi warna, dan melakukannya secara diam-diam di dalam operasi pewarnaan ulang akan menjadi kejutan

// Convert a single page - useful when only the cover needs to change
Lib.SelectPage(1);
Lib.RecolorPage(3);          // this page to CMYK
Lib.SaveToFile('cover-cmyk.pdf');

Di mana pewarnaan ulang cocok sebelum pengiriman ke mesin cetak

Gunakan itu sebagai langkah normalisasi, bukan sebagai manajemen warna. Pewarnaan ulang mengonversi nilai antar ruang device; ia tidak menerapkan profil ICC, menghormati rendering intent, atau mensimulasikan kondisi mesin cetak. Untuk pekerjaan yang harus mencapai contract proof berbasis profil, workflow berbasis profil adalah jawabannya dan pewarnaan ulang paling banyak adalah langkah yang membuat semuanya masuk ke satu ruang lebih dulu

Di mana ia berada tempatnya adalah masalah produksi biasa: pengajuan yang harus grayscale dan tiba dengan logo RGB, dokumen internal yang tidak boleh dicetak berwarna, batch file yang harus berada di satu ruang sebelum langkah preflight menerimanya. Padukan dengan pemeriksaan — catatan tentang preflight PDF/A dan PDF/UA dan tentang workbench kepatuhan dan penandatanganan membahas menjalankan vonis sebagai bagian dari pekerjaan yang sama

Jika dokumen juga perlu karya seni vektornya diperiksa alih-alih dikonversi, panduan grafik vektor, shader dan gradien membahas bagaimana objek-objek itu dibangun sejak awal, yang merupakan konteks yang berguna untuk memahami apa yang dapat dan tidak dapat dijangkau oleh operasi pewarnaan ulang

PDFlibPas adalah library PDF Pascal native untuk Delphi, C++Builder dan Lazarus tanpa runtime eksternal, jadi langkah normalisasi warna berjalan di dalam layanan Anda sendiri alih-alih memanggil konverter eksternal — lihat halaman produk PDFlibPas untuk API pemrosesan dokumen lengkap