印刷可能な CMYK とスポットカラーを生成する
スクリーンのカラーは RGB です。印刷のカラーはそうではありません。印刷機や校正 RIP があなたの PDF を消費するとき、それが求めるのはプロセスインク(CMYK)、ときおりの名前付きインク(スポットまたは Separation カラー)、そしてそれが想定すべき製造条件の宣言です。このレシピは、その読み手のために NextPDF が提供する 3 つのカラー出力パスを示します。
- デバイス CMYK の塗りとストローク――
setFillColorCmyk()/setDrawColorCmyk()。 - スポット / Separation インクを濃度で――
registerSpotColor()の後にsetSpotFillColor()/setSpotDrawColor()。 - ドキュメント全体に対して RGB ワーキング/出力条件を宣言する ICC 出力インテント――
Config::withOutputColorProfile()。同梱のプロファイルは RGB ワーキングスペースであり、これは真の CMYK 印刷機 / PDF/X 印刷条件を宣言するものではありません。
最初に範囲の注記を。これはカラーの 出力 です。NextPDF は、あなたが求める CMYK の数値、Separation スペース、出力インテント宣言を書き込みます。カラーマネジメント変換は実行しません――あなたの RGB アートワークを宛先の CMYK 色域へ再レンダリングしたり、ソフトプルーフしたり、視覚的な一致を保証したりはしません。条件に合わせてすでに指定されたカラーを供給してください。
インストール
「インストール」という見出しのセクションcomposer require nextpdf/core:^3オプションの拡張は必要ありません。カラー API は 1.2.0 以来安定しており、8.1〜8.4 のバックポートマトリクス上で動作します。
デバイス CMYK の塗りとストローク
「デバイス CMYK の塗りとストローク」という見出しのセクションCMYK はオフセットおよびデジタルプロセス印刷のデフォルトです。4 つのチャンネル、シアン / マゼンタ / イエロー / ブラック(「キー」)です。塗りまたはストロークのカラーを設定し、その後通常どおり描画します。
<?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');各呼び出しは、コンテンツストリームへ DeviceCMYK カラー演算子を出力します。非ストローク(塗り/テキスト)のカラーには k、ストロークのカラーには K で、4 つのコンポーネントは PDF が内部で使用する 0.0–1.0 の範囲にスケールされます。ISO 32000-2 §8.6.8(Colour Operators、Table 73)は k と K を DeviceCMYK のカラー設定演算子として定義し、§8.6.4.4 は DeviceCMYK カラースペース自体を定義します。
その背後の値オブジェクトは NextPDF\Graphics\Color です。カラーを直接構築する場合、Color::cmyk($c, $m, $y, $k) は同じ 0–100 パーセンテージを受け取り、これがすべての …Cmyk ドキュメントメソッドが呼び出すものです。
スポット / Separation インクを濃度で
「スポット / Separation インクを濃度で」という見出しのセクションスポットカラーは単一の名前付きインク――Pantone、HKS、ニス、抜き加工の「カット」版――で、印刷機がプロセスインクから作るのではなく、独自の版として読み込むものです。PDF では Separation カラースペースです。カラーラント名に加え、代替スペース(ここでは DeviceCMYK)と、[0, 1] の濃度値を代替スペースへマッピングする tint-transform から成り、非スポットのレンダラーでも近似を表示できます。
インクを CMYK フォールバックとともに一度登録し、その後それを濃度パーセンテージで塗りまたはストロークのカラーとして設定します。
<?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');選択する前に registerSpotColor() しなければなりません。登録されていない名前は PageLayoutException を送出します。登録は Separation リソースと tint transform を書き込みます。setSpotFillColor() / setSpotDrawColor() はその後、その登録済み Separation リソースに対して塗りなら /CS_<token> cs <tint> scn(またはストロークの大文字形式 /CS_<token> CS <tint> SCN)を出力します。ここでは 2 つの異なる名前が働いており、エンジンはそれらを別々に扱います。
- リソースキー――コンテンツストリーム演算子が参照し、ページの
/Resources /ColorSpace辞書のキーとなる/CS_…トークン――は、各非単語文字を_に置き換えることでインク名から導出されるため、'PANTONE 485 C'はリソース/CS_PANTONE_485_Cを選択します。(リテラルの_、ハイフン、その他の句読点を含むインク名については、キーを衝突なく保つために短い決定論的サフィックスが付加されるため、ほぼ同一の 2 つの名前が 1 つのカラースペースを共有することは決してありません。) - Separation カラーラント名 自体――
[/Separation /<name> …]カラースペース配列の中に持たれる名前――はそのまま保たれ、ライターによって PDF 名前オブジェクトとしてエンコードされ、あらゆる区切り文字や非印字バイトを 16 進エスケープ(#XX)します。それはCS_…トークンへ平坦化されません。リソースキーとカラーラント名は独立して計算されます。
渡す濃度引数はパーセンテージで、0(紙)から 100(フルインク)ですが、コンテンツストリームへ書き込まれるオペランドは 正規化された 0.0–1.0 値であるため、40 の濃度は /CS_PANTONE_485_C cs 0.400000 scn を出力します。ISO 32000-2 §8.6.6.4 は Separation カラースペースとその tint transform を扱います。
デフォルトの tint transform は、[0 0 0 0](濃度 0 での紙)から登録済み CMYK フォールバック(濃度 1 でのフルインク)への線形補間です。それは通常のスポットインクには正しいものです。非線形のインクや測定済みのプロファイルにはカスタム変換が必要で、それはこのレシピの範囲を超えます。
ICC 出力インテントを宣言する
「ICC 出力インテントを宣言する」という見出しのセクションPDF は、そのカラーが準備された対象のカラー条件についてのドキュメントレベルの宣言――出力インテント――を持つことができます。製造条件を名指しする辞書で、宛先 ICC プロファイルが ICCBased ストリームとして埋め込まれます。真の印刷 / PDF-X ワークフローでは、これは CMYK 印刷機条件(例えばコート紙の FOGRA または GRACoL プロファイル)です。しかし、NextPDF が同梱するプロファイルは RGB ワーキングスペース であるため、Config::withOutputColorProfile() が宣言するのは RGB の表示 / ワーキングスペース出力条件であり、CMYK 宛先ではありません。印刷出力のために頼る前に、例の下の注記を参照してください。
NextPDF はこれをドキュメントの Config を通じて公開します。同梱のワーキングスペースプロファイルの 1 つを選び、構成を構築し、そこからドキュメントを作成します。
<?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 は、エンジンがプロファイルを同梱するワーキングスペースの enum です。プロファイルに裏付けられたすべてのケースは 3 コンポーネントの RGB ワーキングスペースです。DeviceRGB はデフォルトのセンチネルで、出力インテントを出力しません。 同梱の CMYK 宛先プロファイルはありません。
DeviceRGB―― デフォルト。出力インテントは 出力されません。PDF レベルの出力条件は宣言されず、PDF/A パイプライン(アクティブな場合)が/OutputIntents配列の排他的制御を保持します。出力インテントを宣言したくないときに使用します。(出力インテントのない PDFDeviceRGBコンテンツはデバイス依存です――宣言された sRGB ではありません。)Srgb―― 同梱のsRGB.iccを埋め込む出力インテント辞書を、標準の条件識別子sRGB IEC61966-2.1とともに出力します。DisplayP3、Rec2020、A98RGB、ProphotoRGB―― 広色域 RGB ワーキングスペースで、それぞれが同梱の ICC プロファイルをカスタム(NextPDF wide-gamut …)条件識別子の下に埋め込みます。
DeviceRGB 以外のあらゆるケースは、ライターに、埋め込まれた ICCBased ストリーム(その /N 3 コンポーネント数を伴う)を参照する出力インテント辞書を出力させます。ISO 32000-2 §14.11.5 は出力インテント辞書を定義し、§8.6.5.5 は埋め込まれたプロファイルを運ぶ ICCBased カラースペースを定義します。現在のエンジンでは、どの同梱プロファイルを選んでも、この辞書は PDF/X 出力インテントサブタイプ /GTS_PDFX で書き込まれます(PDF/A アーカイブパスは独自の /GTS_PDFA1 サブタイプを使用し、別に出力されます)。
重要な注意点。すべての同梱プロファイルは RGB であるため、これはドキュメントの RGB ワーキングスペースと表示インテントを宣言します――それは CMYK 宛先プロファイルでは なく、何かを CMYK へ変換することもありません。エンジンは、withOutputColorProfile() を通じてカスタム CMYK 宛先 ICC を供給させません。真の印刷 / PDF-X CMYK 出力インテントは、あなた自身の CMYK ICC プロファイルを宛先として埋め込むワークフローを必要とします。同じ /OutputIntents 配列に配線されたアーカイブ用出力インテントについては、PDF/A-4 出力 を参照してください。
いつどれを選ぶか
「いつどれを選ぶか」という見出しのセクション- デバイス CMYK ―― プロセス印刷機向けのあらゆるアートワークのデフォルト。RGB→CMYK の当て推量が下流で起こらないよう、最初からカラーを CMYK で指定します。
- スポット / Separation ―― 正確なインクに合致しなければならないブランドカラーに加え、非プロセス版(ニス、白、メタリック、抜き加工、箔)。一度登録し、任意の濃度で塗ります。
- 出力インテント ―― ファイルがその RGB ワーキング/出力条件について自己記述的であってほしいとき、または消費者(ビューア、カラーマネジメントされた RIP、バリデーター)が宣言された出力条件を期待するときに設定します。同梱プロファイルは RGB ワーキング/出力条件のみを宣言し、真の CMYK 印刷機 / PDF/X 印刷条件は宣言しません。
エッジケースと落とし穴
「エッジケースと落とし穴」という見出しのセクション- CMYK コンポーネントはパーセンテージ(0–100)であり、0–1 ではありません。
…CmykドキュメントメソッドとColor::cmyk()は各チャンネルを0–100パーセンテージとして受け取り、演算子を書き込むときに 100 で割ります。コンテンツストリームのオペランドは正規化された0.0–1.0値です。フルインクには1.0(エンジンは 1% インクとして扱う)ではなく100を渡してください。 - スポットを選択する前に登録する。
setSpotFillColor()/setSpotDrawColor()は、名前が一度も登録されていなければ送出します。名前は、大文字小文字とスペースを含めて正確にマッチされます。 - カラー状態は持続します。 CMYK またはスポットのカラーは、変更するまで有効なままです。無関係なブロックの前にリセットしてください。
- CMYK フォールバックは近似です。 Separation tint transform は、非スポットのレンダラーが 何か を表示できるよう存在します。それは印刷機の出力ではありません。本物のインクは、名前付きの版が生成するものです。
- 出力インテントは宣言であり、変換ではありません。
OutputColorProfile::Srgbを宣言しても、カラーを sRGB へ変換することはありません。意図された条件を述べるだけです。カラーの正確さは、上流のあなたの責任です。
パフォーマンス
「パフォーマンス」という見出しのセクション各カラー選択は単一のコンテンツストリーム演算子です。スポットは、登録済みインクごとに 1 つの Separation リソースも書き込みます。埋め込まれた出力インテントプロファイルは、ドキュメントごとに一度書き込まれます。すべてのパスは 2000 ms / 64 MB の予算に十分収まります。
セキュリティに関する注意
「セキュリティに関する注意」という見出しのセクションこのレシピは、コードが指定したカラーとプロファイルのみを出力します。信頼できない入力を解析せず、ネットワークアクセスも行いません。カラーラント名や CMYK コンポーネントが外部データから来る場合は、検証してください。コンポーネントを 0–100 にクランプし、スポット名の制御文字を拒否します(Separation 名の NUL バイトはエンジンによって拒否されます)。
| 記述 | 仕様 | 条項 |
|---|---|---|
k と K は、DeviceCMYK の非ストローク / ストロークカラーを設定するカラー演算子。 | ISO 32000-2 | §8.6.8 |
| DeviceCMYK は減法混色の 4 コンポーネントプロセスカラースペース。 | ISO 32000-2 | §8.6.4.4 |
| Separation カラースペースは、濃度が tint transform を介して代替スペースへマッピングされる 1 つのカラーラントを名指しする。 | ISO 32000-2 | §8.6.6.4 |
ICCBased カラースペースは、/N コンポーネント数を持つ ICC プロファイルストリームを埋め込む。 | ISO 32000-2 | §8.6.5.5 |
出力インテントは対象の製造条件を宣言する。GTS_PDFX が印刷サブタイプを名指しする。 | ISO 32000-2 | §14.11.5 |
再現性プロファイル ―― structural。 カラー出力にはそれ自体のエントロピーはありませんが、保存されるすべてのドキュメントはトレーラーの /ID と日付アトムを持ち、埋め込まれた ICC ストリームは固定された同梱プロファイルについてのみバイト安定です。サポートされる主張は、qpdf 正規化後の構造的等価です。このレシピは NextPDF が構造をどのように生成するかを記述します。一括した ISO 32000-2 適合は主張しません。
商用コンテキスト
「商用コンテキスト」という見出しのセクション該当なし。デバイス CMYK、スポット/Separation カラー、出力インテント宣言は、Premium ゲートのない Core の機能です。Core は、ここに示した同梱 RGB 出力インテント宣言をサポートします。カスタム CMYK 印刷条件 ICC ワークフローは、このレシピでは主張されません。