Menghasilkan CMYK dan warna spot siap-cetak
Sekilas pandang
Bagian berjudul “Sekilas pandang”Warna layar adalah RGB. Warna cetak bukan. Ketika sebuah mesin cetak atau RIP proofing mengonsumsi PDF Anda, ia menginginkan tinta proses (CMYK), sesekali tinta bernama (sebuah warna spot atau Separation), dan deklarasi kondisi produksi yang harus diasumsikannya. Resep ini menunjukkan tiga jalur pemancaran warna yang NextPDF berikan untuk audiens tersebut:
- Isi dan stroke device CMYK —
setFillColorCmyk()/setDrawColorCmyk(). - Tinta spot / Separation pada sebuah tint —
registerSpotColor()lalusetSpotFillColor()/setSpotDrawColor(). - Sebuah output intent ICC yang mendeklarasikan kondisi working/output RGB untuk seluruh dokumen —
Config::withOutputColorProfile(). Profil yang dibundel adalah working space RGB; ini tidak mendeklarasikan kondisi cetak CMYK / PDF/X yang sebenarnya.
Catatan cakupan di awal: ini adalah pemancaran warna. NextPDF menulis angka CMYK, ruang Separation, dan deklarasi output-intent yang Anda minta. Ia tidak menjalankan transform color-management — ia tidak akan me-render ulang artwork RGB Anda ke gamut CMYK tujuan, mem-soft-proof-nya, atau menjamin kecocokan visual. Suplaikan warna yang sudah dispesifikasikan untuk kondisi Anda.
Pemasangan
Bagian berjudul “Pemasangan”composer require nextpdf/core:^3Tidak diperlukan ekstensi opsional. API warna telah stabil sejak 1.2.0 dan berjalan pada matriks backport 8.1–8.4.
Isi dan stroke device CMYK
Bagian berjudul “Isi dan stroke device CMYK”CMYK adalah default untuk pencetakan proses offset dan digital: empat kanal, cyan / magenta / yellow / black (sang “key”). Setel warna isi atau stroke, lalu gambar seperti biasa.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
$doc = Document::createStandalone();$doc->addPage();
// Components are percentages, 0–100 (cyan, magenta, yellow, key).$doc->setFillColorCmyk(0, 95, 100, 0); // a process "red"$doc->rect(20, 30, 60, 40, 'F');
$doc->setDrawColorCmyk(100, 0, 0, 0); // pure cyan rule$doc->setLineWidth(1.0);$doc->rect(20, 30, 60, 40, 'S');
$doc->setTextColorCmyk(0, 0, 0, 100); // rich-free 100% K text$doc->setFont('helvetica', '', 12);$doc->text(20, 85, 'Process CMYK');
$doc->save(getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: __DIR__ . '/cmyk.pdf');Setiap pemanggilan memancarkan sebuah operator warna DeviceCMYK ke dalam content stream: k untuk warna non-stroking (isi/teks) dan K untuk warna stroking, dengan keempat komponen diskalakan ke rentang 0.0–1.0 yang dipakai PDF secara internal. ISO 32000-2 §8.6.8 (Colour Operators, Table 73) mendefinisikan k dan K sebagai operator penyetelan warna DeviceCMYK; §8.6.4.4 mendefinisikan ruang warna DeviceCMYK itu sendiri.
Value object yang mendasarinya adalah NextPDF\Graphics\Color. Jika Anda membangun warna secara langsung, Color::cmyk($c, $m, $y, $k) mengambil persentase 0–100 yang sama dan merupakan apa yang dipanggil oleh setiap metode dokumen …Cmyk.
Tinta spot / Separation pada sebuah tint
Bagian berjudul “Tinta spot / Separation pada sebuah tint”Sebuah warna spot adalah satu tinta bernama tunggal — sebuah Pantone, sebuah HKS, sebuah varnish, sebuah plate “cut” die-cut — yang dimuat mesin cetak sebagai plate-nya sendiri alih-alih dibangun dari tinta proses. Dalam PDF ia adalah ruang warna Separation: sebuah nama colourant ditambah ruang alternatif (di sini DeviceCMYK) dan sebuah tint-transform yang memetakan nilai tint dalam [0, 1] ke alternatif tersebut, sehingga perender non-spot tetap menampilkan sebuah perkiraan.
Daftarkan tinta sekali dengan fallback CMYK-nya, lalu setel sebagai warna isi atau stroke pada sebuah persentase tint:
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
$doc = Document::createStandalone();$doc->addPage();
// Register the ink and its CMYK fallback (percentages, 0–100).$doc->registerSpotColor('PANTONE 485 C', 0, 95, 100, 0);
// Full-strength fill.$doc->setSpotFillColor('PANTONE 485 C'); // tint defaults to 100$doc->rect(20, 30, 50, 30, 'F');
// 40% tint of the same ink.$doc->setSpotFillColor('PANTONE 485 C', 40);$doc->rect(80, 30, 50, 30, 'F');
// Same ink as a stroke at 75%.$doc->setSpotDrawColor('PANTONE 485 C', 75);$doc->setLineWidth(1.5);$doc->line(20, 75, 130, 75);
$doc->save(getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: __DIR__ . '/spot.pdf');Anda harus registerSpotColor() sebelum Anda memilihnya; sebuah nama yang tidak terdaftar melempar PageLayoutException. Pendaftaran menulis resource Separation dan tint transform; setSpotFillColor() / setSpotDrawColor() kemudian memancarkan /CS_<token> cs <tint> scn untuk sebuah isi (atau bentuk stroking huruf-besar /CS_<token> CS <tint> SCN) terhadap resource Separation yang terdaftar itu. Dua nama berbeda berperan di sini, dan engine menanganinya secara terpisah:
- KEY resource — token
/CS_…yang direferensikan oleh operator content-stream dan yang menjadi kunci dictionary/Resources /ColorSpacehalaman — diturunkan dari nama tinta dengan mengganti setiap karakter non-word dengan_, sehingga'PANTONE 485 C'memilih resource/CS_PANTONE_485_C. (Untuk nama tinta yang memuat_literal, sebuah hyphen, atau tanda baca lain, sebuah sufiks deterministik pendek ditambahkan agar kunci bebas tabrakan, sehingga dua nama yang nyaris identik tidak pernah berbagi satu ruang warna.) - Nama colourant Separation itu sendiri — nama yang dibawa di dalam array ruang warna
[/Separation /<name> …]— dipertahankan apa adanya dan dikodekan oleh writer sebagai object nama PDF, dengan hex-escape (#XX) pada setiap delimiter atau byte non-printing. Ia tidak diratakan menjadi tokenCS_…; kunci resource dan nama colourant dihitung secara independen.
Argumen tint yang Anda teruskan adalah sebuah persentase, 0 (kertas) hingga 100 (tinta penuh), tetapi operand yang ditulis ke dalam content stream adalah nilai ternormalisasi 0.0–1.0, sehingga tint 40 memancarkan /CS_PANTONE_485_C cs 0.400000 scn. ISO 32000-2 §8.6.6.4 mencakup ruang warna Separation dan tint transform-nya.
Tint transform default adalah interpolasi linear dari [0 0 0 0] (kertas pada tint 0) ke fallback CMYK terdaftar (tinta penuh pada tint 1). Itu benar untuk tinta spot biasa; sebuah tinta non-linear atau profil terukur membutuhkan transform kustom, yang berada di luar resep ini.
Deklarasikan output intent ICC
Bagian berjudul “Deklarasikan output intent ICC”PDF dapat membawa deklarasi tingkat-dokumen tentang kondisi warna yang menjadi tujuan persiapan warnanya — sebuah output intent: sebuah dictionary yang menamai kondisi produksi, dengan profil ICC tujuan tersemat sebagai stream ICCBased. Dalam alur cetak/PDF-X yang sebenarnya ini adalah kondisi mesin cetak CMYK (sebuah profil coated FOGRA atau GRACoL, misalnya). Namun, profil yang dibundel NextPDF adalah working space RGB — sehingga apa yang dideklarasikan Config::withOutputColorProfile() adalah kondisi output viewing / working-space RGB, bukan tujuan CMYK. Lihat catatan di bawah contoh sebelum mengandalkannya untuk keluaran cetak.
NextPDF mengeksposnya melalui Config dokumen. Pilih salah satu profil working-space yang dibundel, bangun config, dan buat dokumen darinya:
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Config;use NextPDF\Core\Document;use NextPDF\Core\OutputColorProfile;
// Declare an explicit, embedded output intent for the document.$config = (new Config()) ->withOutputColorProfile(OutputColorProfile::Srgb);
$doc = Document::createStandalone($config);$doc->addPage();
$doc->setFillColorCmyk(0, 95, 100, 0);$doc->rect(20, 30, 60, 40, 'F');
$doc->save(getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: __DIR__ . '/with-intent.pdf');OutputColorProfile adalah sebuah enum working space yang profilnya dibundel oleh engine. Semua case yang didukung profil adalah working space RGB tiga-komponen; DeviceRGB adalah sentinel default dan tidak memancarkan output intent. Tidak ada profil tujuan CMYK yang dibundel:
DeviceRGB— default. Tidak ada output intent yang dipancarkan: tidak ada kondisi output tingkat-PDF yang dideklarasikan, dan pipeline PDF/A (jika aktif) mempertahankan kendali eksklusif atas array/OutputIntents. Gunakan ini ketika Anda tidak ingin mendeklarasikan satu pun. (Konten PDFDeviceRGBtanpa output intent bersifat device-dependent — ia bukan sRGB yang dideklarasikan.)Srgb— memancarkan sebuah dictionary output-intent yang menyematkansRGB.iccyang dibundel, dengan pengenal kondisi standarsRGB IEC61966-2.1.DisplayP3,Rec2020,A98RGB,ProphotoRGB— working space RGB wide-gamut, masing-masing menyematkan profil ICC yang dibundelnya di bawah pengenal kondisi kustom (NextPDF wide-gamut …).
Case apa pun selain DeviceRGB membuat writer memancarkan sebuah dictionary output-intent yang mereferensikan stream ICCBased tersemat (dengan jumlah komponen /N 3-nya). ISO 32000-2 §14.11.5 mendefinisikan dictionary output-intent; §8.6.5.5 mendefinisikan ruang warna ICCBased yang membawa profil tersemat. Pada engine saat ini, dictionary ini ditulis dengan subtype output-intent PDF/X /GTS_PDFX terlepas dari profil dibundel mana yang Anda pilih (jalur arsip PDF/A menggunakan subtype /GTS_PDFA1-nya sendiri dan dipancarkan secara terpisah).
Peringatan penting: karena semua profil yang dibundel adalah RGB, ini mendeklarasikan working space RGB dan viewing intent dokumen — ini bukan profil tujuan CMYK, dan ia tidak mentransformasi apa pun menjadi CMYK. Engine tidak mengizinkan Anda menyuplai profil ICC tujuan CMYK kustom melalui withOutputColorProfile(). Sebuah output intent CMYK cetak/PDF-X yang sebenarnya membutuhkan alur yang menyematkan profil ICC CMYK Anda sendiri sebagai tujuan; untuk output intent arsip yang dikaitkan ke dalam array /OutputIntents yang sama, lihat Keluaran PDF/A-4.
Kapan menggunakan masing-masing
Bagian berjudul “Kapan menggunakan masing-masing”- Device CMYK — default untuk artwork apa pun yang ditujukan ke mesin cetak proses. Spesifikasikan warna Anda dalam CMYK sejak awal sehingga tidak ada tebak-tebakan RGB→CMYK yang terjadi di hilir.
- Spot / Separation — warna merek yang harus mengenai tinta persis, plus plate non-proses (varnish, putih, metalik, die-cut, foil). Daftarkan sekali, lukis pada tint mana pun.
- Output intent — setel ketika Anda ingin berkas mendeskripsikan dirinya sendiri tentang kondisi working/output RGB-nya, atau ketika sebuah konsumen (sebuah viewer, sebuah RIP yang color-managed, sebuah validator) mengharapkan kondisi output yang dideklarasikan. Profil yang dibundel hanya mendeklarasikan kondisi working/output RGB; mereka tidak mendeklarasikan kondisi cetak CMYK / PDF/X yang sebenarnya.
Kasus tepi & jebakan
Bagian berjudul “Kasus tepi & jebakan”- Komponen CMYK adalah persentase (0–100), bukan 0–1. Metode dokumen
…CmykdanColor::cmyk()mengambil setiap kanal sebagai persentase0–100dan membaginya dengan 100 saat menulis operator; operand content-stream adalah nilai ternormalisasi0.0–1.0. Teruskan100untuk tinta penuh, bukan1.0(yang akan diperlakukan engine sebagai tinta 1%). - Daftarkan sebelum Anda memilih sebuah spot.
setSpotFillColor()/setSpotDrawColor()melempar jika nama tidak pernah didaftarkan. Nama dicocokkan persis, termasuk huruf besar/kecil dan spasi. - State warna bertahan. Sebuah warna CMYK atau spot tetap berlaku hingga Anda mengubahnya. Reset sebelum sebuah blok yang tidak terkait.
- Fallback CMYK adalah perkiraan. Tint transform Separation ada agar perender non-spot dapat menampilkan sesuatu; ia bukan keluaran mesin cetak. Tinta yang sebenarnya adalah apa yang dihasilkan plate bernama.
- Output intent adalah deklarasi, bukan konversi. Mendeklarasikan
OutputColorProfile::Srgbtidak mentransformasi warna Anda menjadi sRGB; ia menyatakan kondisi yang dimaksudkan. Akurasi warna adalah tanggung jawab Anda di hulu.
Performa
Bagian berjudul “Performa”Setiap pemilihan warna adalah satu operator content-stream; sebuah spot juga menulis satu resource Separation per tinta terdaftar. Sebuah profil output-intent tersemat ditulis sekali per dokumen. Semua jalur tetap berada jauh di dalam budget 2000 ms / 64 MB.
Catatan keamanan
Bagian berjudul “Catatan keamanan”Resep ini hanya memancarkan warna dan profil yang dispesifikasikan kode Anda. Ia tidak mengurai input yang tidak tepercaya dan tidak melakukan akses jaringan. Jika nama colourant atau komponen CMYK berasal dari data eksternal, validasi: clamp komponen ke 0–100 dan tolak karakter kontrol dalam nama spot (sebuah byte NUL dalam nama Separation ditolak oleh engine).
Konformitas
Bagian berjudul “Konformitas”| Pernyataan | Spec | Klausa |
|---|---|---|
k dan K adalah operator warna yang menyetel warna non-stroking / stroking DeviceCMYK. | ISO 32000-2 | §8.6.8 |
| DeviceCMYK adalah ruang warna proses empat-komponen yang subtraktif. | ISO 32000-2 | §8.6.4.4 |
| Sebuah ruang warna Separation menamai satu colourant yang tint-nya dipetakan ke ruang alternatif melalui sebuah tint transform. | ISO 32000-2 | §8.6.6.4 |
Sebuah ruang warna ICCBased menyematkan stream profil ICC dengan jumlah komponen /N. | ISO 32000-2 | §8.6.5.5 |
Sebuah output intent mendeklarasikan kondisi produksi target; GTS_PDFX menamai subtype cetak. | ISO 32000-2 | §14.11.5 |
Profil reproducibility — structural. Pemancaran warna tidak memiliki entropi tersendiri, tetapi setiap dokumen yang disimpan membawa atom trailer /ID dan tanggal, dan sebuah stream ICC tersemat hanya stabil secara byte untuk sebuah profil dibundel yang tetap. Klaim yang didukung adalah kesetaraan struktural setelah normalisasi qpdf. Resep ini menjelaskan bagaimana NextPDF menghasilkan struktur tersebut; ia tidak menegaskan konformitas ISO 32000-2 secara menyeluruh.
Konteks komersial
Bagian berjudul “Konteks komersial”Tidak berlaku. Device CMYK, warna spot/Separation, dan deklarasi output-intent adalah kapabilitas Core tanpa gerbang Premium. Core mendukung deklarasi output-intent RGB yang dibundel yang ditunjukkan di sini; alur ICC kondisi-cetak CMYK kustom tidak diklaim oleh resep ini.