Bỏ qua để đến nội dung
getnextpdf.com

Tạo màu CMYK và spot sẵn sàng in

Màu màn hình là RGB. Màu in thì không. Khi một máy in hoặc một RIP soát mẫu tiêu thụ PDF của bạn, nó muốn các mực process (CMYK), thỉnh thoảng là một mực đã đặt tên (một màu spot hoặc Separation), và một khai báo về điều kiện sản xuất mà nó nên giả định. Công thức này trình bày ba đường phát màu mà NextPDF cho bạn vì đối tượng đó:

  • Device CMYK tô và vẽ nét — setFillColorCmyk() / setDrawColorCmyk().
  • Spot / Separation mực ở một sắc độ — registerSpotColor() rồi setSpotFillColor() / setSpotDrawColor().
  • Một output intent ICC khai báo một điều kiện làm việc/đầu ra RGB cho toàn bộ tài liệu — Config::withOutputColorProfile(). Các hồ sơ đi kèm là các không gian làm việc RGB; điều này không khai báo một điều kiện in máy CMYK / PDF/X thực sự.

Một ghi chú phạm vi nói trước: đây là phát màu. NextPDF ghi các số CMYK, không gian Separation, và khai báo output-intent mà bạn yêu cầu. Nó không chạy một phép biến đổi quản lý màu — nó sẽ không kết xuất lại tác phẩm RGB của bạn vào một gam CMYK đích, soft-proof nó, hay đảm bảo một sự khớp về thị giác. Hãy cung cấp các màu đã được đặc tả sẵn cho điều kiện của bạn.

Terminal window
composer require nextpdf/core:^3

Không cần extension tùy chọn nào. API màu đã ổn định từ 1.2.0 và chạy trên ma trận backport 8.1–8.4.

CMYK là mặc định cho in process offset và kỹ thuật số: bốn kênh, cyan / magenta / yellow / black (the “key”). Đặt màu tô hoặc nét, rồi vẽ như thường.

<?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');

Mỗi lệnh gọi phát ra một toán tử màu DeviceCMYK vào content stream: k cho màu không-vẽ-nét (tô/văn bản) và K cho màu vẽ nét, với bốn thành phần được tỷ lệ về dải 0.0–1.0 mà PDF dùng nội bộ. ISO 32000-2 §8.6.8 (Colour Operators, Table 73) định nghĩa kK là các toán tử đặt màu DeviceCMYK; §8.6.4.4 định nghĩa chính không gian màu DeviceCMYK.

Đối tượng giá trị nền tảng là NextPDF\Graphics\Color. Nếu bạn dựng màu trực tiếp, Color::cmyk($c, $m, $y, $k) nhận cùng các phần trăm 0–100 và là thứ mà mọi phương thức tài liệu …Cmyk gọi.

Một màu spot là một mực đã đặt tên duy nhất — một Pantone, một HKS, một varnish, một bản “cut” dập khuôn — mà máy in nạp như bản riêng của nó thay vì dựng từ các mực process. Trong PDF nó là một không gian màu Separation: một tên chất tạo màu cộng với một không gian thay thế (ở đây là DeviceCMYK) và một tint-transform ánh xạ một giá trị sắc độ trong [0, 1] sang không gian thay thế, để các bộ kết xuất phi-spot vẫn hiển thị một phép xấp xỉ.

Đăng ký mực một lần với dự phòng CMYK của nó, rồi đặt nó làm màu tô hoặc nét ở một phần trăm sắc độ:

<?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');

Bạn phải registerSpotColor() trước khi bạn chọn nó; một tên chưa đăng ký ném một PageLayoutException. Việc đăng ký ghi tài nguyên Separation và tint transform; setSpotFillColor() / setSpotDrawColor() rồi phát ra /CS_<token> cs <tint> scn cho một lần tô (hoặc dạng vẽ nét chữ hoa /CS_<token> CS <tint> SCN) đối với tài nguyên Separation đã đăng ký đó. Hai tên riêng biệt được dùng ở đây, và engine xử lý chúng tách bạch:

  • KHÓA tài nguyên — token /CS_… mà toán tử content-stream tham chiếu và mà từ điển /Resources /ColorSpace của trang được khóa theo — được dẫn xuất từ tên mực bằng cách thay mỗi ký tự phi-từ bằng _, nên 'PANTONE 485 C' chọn tài nguyên /CS_PANTONE_485_C. (Với các tên mực chứa một _ theo nghĩa đen, một dấu gạch nối, hoặc dấu câu khác, một hậu tố tất định ngắn được nối thêm để giữ khóa không xung đột, nên hai tên gần-giống-hệt không bao giờ chia sẻ một không gian màu.)
  • Bản thân tên chất tạo màu Separation — tên mang bên trong mảng không gian màu [/Separation /<name> …] — được giữ nguyên và được bộ ghi mã hóa thành một đối tượng tên PDF, hex-escape (#XX) bất kỳ dấu phân cách hoặc byte không-in-được nào. Nó không bị làm phẳng thành token CS_…; khóa tài nguyên và tên chất tạo màu được tính độc lập.

Đối số sắc độ bạn truyền là một phần trăm, 0 (giấy) tới 100 (đầy mực), nhưng toán hạng được ghi vào content stream là giá trị đã chuẩn hóa 0.0–1.0, nên một sắc độ 40 phát ra /CS_PANTONE_485_C cs 0.400000 scn. ISO 32000-2 §8.6.6.4 bao quát các không gian màu Separation và tint transform của chúng.

Tint transform mặc định là một phép nội suy tuyến tính từ [0 0 0 0] (giấy ở sắc độ 0) đến dự phòng CMYK đã đăng ký (đầy mực ở sắc độ 1). Điều đó đúng cho các mực spot thông thường; một mực phi tuyến hoặc một hồ sơ đã đo cần một phép biến đổi tùy chỉnh, vốn nằm ngoài công thức này.

PDF có thể mang một khai báo ở mức tài liệu về điều kiện màu mà các màu của nó đã được chuẩn bị cho — một output intent: một từ điển đặt tên điều kiện sản xuất, với hồ sơ ICC đích được nhúng dưới dạng một ICCBased stream. Trong một quy trình in/PDF-X thực sự, đây là một điều kiện in máy CMYK (một hồ sơ FOGRA hoặc GRACoL tráng phủ, chẳng hạn). Tuy nhiên, các hồ sơ mà NextPDF đi kèm là các không gian làm việc RGB — nên điều mà Config::withOutputColorProfile() khai báo là một điều kiện đầu ra xem/làm việc RGB, không phải một đích CMYK. Hãy xem ghi chú bên dưới ví dụ trước khi dựa vào nó cho đầu ra in máy.

NextPDF phơi bày điều này qua Config của tài liệu. Hãy chọn một trong các hồ sơ không-gian-làm-việc đi kèm, dựng config, và tạo tài liệu từ nó:

<?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 là một enum của các không gian làm việc mà engine đi kèm một hồ sơ. Mọi trường hợp có hồ sơ đều là các không gian làm việc RGB ba thành phần; DeviceRGB là giá trị canh mặc định và không phát output intent nào. Không có hồ sơ đích CMYK nào đi kèm:

  • DeviceRGB — mặc định. Không output intent nào được phát: không có điều kiện đầu ra ở mức PDF nào được khai báo, và pipeline PDF/A (nếu hoạt động) giữ quyền kiểm soát độc quyền mảng /OutputIntents. Hãy dùng cái này khi bạn không muốn khai báo một cái. (Nội dung PDF DeviceRGB không có output intent là phụ thuộc thiết bị — nó không phải một sRGB đã khai báo.)
  • Srgb — phát ra một từ điển output-intent nhúng sRGB.icc đi kèm, với định danh điều kiện chuẩn sRGB IEC61966-2.1.
  • DisplayP3, Rec2020, A98RGB, ProphotoRGB — các không gian làm việc RGB gam rộng, mỗi cái nhúng hồ sơ ICC đi kèm của nó dưới một định danh điều kiện tùy chỉnh (NextPDF wide-gamut …).

Bất kỳ trường hợp nào khác DeviceRGB làm cho bộ ghi phát ra một từ điển output-intent tham chiếu ICCBased stream đã nhúng (với số đếm thành phần /N 3 của nó). ISO 32000-2 §14.11.5 định nghĩa từ điển output-intent; §8.6.5.5 định nghĩa không gian màu ICCBased mang hồ sơ đã nhúng. Trong engine hiện tại, từ điển này được ghi với loại con output-intent PDF/X /GTS_PDFX bất kể bạn chọn hồ sơ đi kèm nào (đường lưu trữ PDF/A dùng loại con /GTS_PDFA1 riêng của nó và được phát ra tách biệt).

Lưu ý quan trọng: vì mọi hồ sơ đi kèm đều là RGB, điều này khai báo không gian làm việc RGB và ý định xem của tài liệu — nó không phải một hồ sơ đích CMYK, và nó không biến đổi bất cứ thứ gì sang CMYK. Engine không cho bạn cung cấp một hồ sơ ICC đích CMYK tùy chỉnh qua withOutputColorProfile(). Một output intent CMYK in/PDF-X thực sự đòi hỏi một quy trình nhúng hồ sơ ICC CMYK của riêng bạn làm đích; với một output intent lưu trữ được nối vào cùng mảng /OutputIntents, hãy xem Đầu ra PDF/A-4.

  • Device CMYK — mặc định cho bất kỳ tác phẩm nào hướng tới một máy in process. Hãy đặc tả các màu của bạn trong CMYK ngay từ đầu để không có sự đoán mò RGB→CMYK nào xảy ra xuôi dòng.
  • Spot / Separation — các màu thương hiệu phải trúng một mực chính xác, cộng với các bản phi-process (varnish, trắng, kim loại, dập khuôn, foil). Đăng ký một lần, sơn ở bất kỳ sắc độ nào.
  • Output intent — đặt nó khi bạn muốn tệp tự mô tả về điều kiện làm việc/đầu ra RGB của nó, hoặc khi một bên tiêu thụ (một trình xem, một RIP quản-lý-màu, một bộ xác thực) kỳ vọng một điều kiện đầu ra đã khai báo. Các hồ sơ đi kèm chỉ khai báo một điều kiện làm việc/đầu ra RGB; chúng không khai báo một điều kiện in máy CMYK / PDF/X thực sự.
  • Các thành phần CMYK là phần trăm (0–100), không phải 0–1. Các phương thức tài liệu …CmykColor::cmyk() nhận mỗi kênh là một phần trăm 0–100 và chia cho 100 khi ghi toán tử; toán hạng content-stream là giá trị đã chuẩn hóa 0.0–1.0. Hãy truyền 100 cho đầy mực, không phải 1.0 (mà engine sẽ coi là 1% mực).
  • Đăng ký trước khi bạn chọn một spot. setSpotFillColor() / setSpotDrawColor() ném nếu tên chưa từng được đăng ký. Các tên được khớp chính xác, bao gồm hoa thường và khoảng trắng.
  • Trạng thái màu được giữ lại. Một màu CMYK hoặc spot vẫn có hiệu lực cho đến khi bạn thay đổi nó. Hãy đặt lại trước một khối không liên quan.
  • Dự phòng CMYK là một phép xấp xỉ. Tint transform của Separation tồn tại để các bộ kết xuất phi-spot có thể hiển thị một cái gì đó; nó không phải đầu ra in máy. Mực thực là thứ mà bản đã đặt tên tạo ra.
  • Một output intent là một khai báo, không phải một phép chuyển đổi. Khai báo OutputColorProfile::Srgb không biến đổi các màu của bạn sang sRGB; nó nêu điều kiện dự định. Độ chính xác màu là trách nhiệm của bạn ở thượng nguồn.

Mỗi lần chọn màu là một toán tử content-stream duy nhất; một spot cũng ghi một tài nguyên Separation cho mỗi mực đã đăng ký. Một hồ sơ output-intent đã nhúng được ghi một lần cho mỗi tài liệu. Mọi đường đều nằm trong khoảng giới hạn 2000 ms / 64 MB.

Công thức này chỉ phát ra các màu và hồ sơ mà mã của bạn đặc tả. Nó không phân tích đầu vào không đáng tin nào và không truy cập mạng. Nếu các tên chất tạo màu hoặc thành phần CMYK đến từ dữ liệu bên ngoài, hãy xác thực chúng: kẹp các thành phần về 0–100 và từ chối các ký tự điều khiển trong tên spot (một byte NUL trong một tên Separation bị engine từ chối).

Tuyên bốSpecĐiều khoản
kK là các toán tử màu đặt màu DeviceCMYK không-vẽ-nét / vẽ nét.ISO 32000-2§8.6.8
DeviceCMYK là không gian màu process trừ bốn thành phần.ISO 32000-2§8.6.4.4
Một không gian màu Separation đặt tên một chất tạo màu mà sắc độ của nó ánh xạ sang một không gian thay thế qua một tint transform.ISO 32000-2§8.6.6.4
Một không gian màu ICCBased nhúng một luồng hồ sơ ICC với một số đếm thành phần /N.ISO 32000-2§8.6.5.5
Một output intent khai báo điều kiện sản xuất đích; GTS_PDFX đặt tên loại con in.ISO 32000-2§14.11.5

Hồ sơ tái lập — structural. Phát màu không có entropy của riêng nó, nhưng mọi tài liệu đã lưu mang một /ID trailer và các nguyên tử ngày tháng, và một luồng ICC đã nhúng chỉ ổn định về byte cho một hồ sơ đi kèm cố định. Tuyên bố được hỗ trợ là sự bằng nhau về cấu trúc sau khi chuẩn hóa bằng qpdf. Công thức này mô tả cách NextPDF tạo ra cấu trúc; nó không khẳng định sự tuân thủ ISO 32000-2 toàn diện.

Không áp dụng. Device CMYK, màu spot/Separation, và khai báo output-intent là các năng lực Core không có cổng Premium. Core hỗ trợ khai báo output-intent RGB đi kèm được trình bày ở đây; các quy trình ICC điều-kiện-in CMYK tùy chỉnh không được công thức này khẳng định.