인쇄 준비 CMYK 및 별색 생성
한눈에 보기
섹션 제목: “한눈에 보기”화면 색상은 RGB입니다. 인쇄 색상은 그렇지 않습니다. 인쇄기나 교정 RIP가 PDF를 소비할 때, 그것은 프로세스 잉크(CMYK), 가끔의 명명된 잉크(별색 또는 Separation 색상), 그리고 가정해야 할 생산 조건의 선언을 원합니다. 이 레시피는 그 대상을 위해 NextPDF가 제공하는 세 가지 색상 방출 경로를 보여 줍니다.
- 장치 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는 오프셋 및 디지털 프로세스 인쇄의 기본입니다. 네 채널, 시안 / 마젠타 / 옐로 / 검정(“key”)입니다. 채우기나 선 색상을 설정한 뒤 평소처럼 그리십시오.
<?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이며, 네 컴포넌트는 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, 바니시, 다이컷 “cut” 판 — 으로, 인쇄기가 프로세스 잉크로 구성하는 대신 자체 판으로 로드합니다. PDF에서 이는 Separation 색상 공간입니다. 색재 이름에 더해 대체 공간(여기서는 DeviceCMYK)과, [0, 1]의 농도 값을 대체 공간으로 매핑하는 농도 변환이 있어 별색이 아닌 렌더러도 여전히 근사치를 보여 줍니다.
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 리소스와 농도 변환을 작성하며, 그 후 setSpotFillColor() / setSpotDrawColor()는 채우기에 대해 /CS_<token> cs <tint> scn(또는 대문자 획 형태인 /CS_<token> CS <tint> SCN)을 그 등록된 Separation 리소스에 대해 방출합니다. 여기서 두 개의 구별되는 이름이 작용하며, 엔진은 그것들을 별도로 처리합니다.
- 리소스 KEY — 콘텐츠 스트림 연산자가 참조하고 페이지의
/Resources /ColorSpace딕셔너리가 키로 삼는/CS_…토큰 — 은 각 비단어 문자를_로 바꾸어 잉크 이름에서 도출되므로,'PANTONE 485 C'는 리소스/CS_PANTONE_485_C를 선택합니다. (리터럴_, 하이픈, 또는 기타 구두점을 포함하는 잉크 이름의 경우, 키를 충돌 없이 유지하기 위해 짧은 결정적 접미사가 추가되므로, 거의 동일한 두 이름이 하나의 색상 공간을 공유하는 일은 결코 없습니다.) - 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 색상 공간과 그 농도 변환을 다룹니다.
기본 농도 변환은 [0 0 0 0](농도 0의 종이)에서 등록된 CMYK 폴백(농도 1의 전체 잉크)으로의 선형 보간입니다. 이는 일반적인 별색 잉크에는 올바릅니다. 비선형 잉크나 측정된 프로필에는 사용자 정의 변환이 필요하며, 이는 이 레시피의 범위를 벗어납니다.
ICC 출력 인텐트 선언
섹션 제목: “ICC 출력 인텐트 선언”PDF는 그 색상이 준비된 색상 조건의 문서 수준 선언을 담을 수 있습니다 — 출력 인텐트: 생산 조건의 이름을 명명하는 딕셔너리로, 대상 ICC 프로필이 ICCBased 스트림으로 임베드됩니다. 진정한 인쇄/PDF-X 워크플로에서 이는 CMYK 인쇄기 조건입니다(예를 들어 코팅된 FOGRA 또는 GRACoL 프로필). 그러나 NextPDF가 번들하는 프로필은 RGB 작업 공간이므로, Config::withOutputColorProfile()이 선언하는 것은 CMYK 대상이 아니라 RGB 보기 / 작업 공간 출력 조건입니다. 인쇄 출력에 의존하기 전에 예제 아래의 참고 사항을 읽으십시오.
NextPDF는 이를 문서 Config를 통해 노출합니다. 번들된 작업 공간 프로필 중 하나를 고르고, 구성을 구축한 뒤, 그것으로 문서를 생성하십시오.
<?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은 엔진이 프로필을 번들하는 작업 공간의 열거형입니다. 모든 프로필 기반 케이스는 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–1이 아니라 백분율(0–100)입니다.
…Cmyk문서 메서드와Color::cmyk()는 각 채널을0–100백분율로 받아 연산자를 작성할 때 100으로 나눕니다. 콘텐츠 스트림 피연산자는 정규화된0.0–1.0값입니다. 전체 잉크에는1.0(엔진이 1% 잉크로 취급함)이 아니라100을 전달하십시오. - 별색을 선택하기 전에 등록하십시오.
setSpotFillColor()/setSpotDrawColor()는 이름이 등록된 적이 없으면 던집니다. 이름은 대소문자와 공백을 포함하여 정확히 매칭됩니다. - 색상 상태는 지속됩니다. CMYK나 별색 색상은 변경할 때까지 유효한 상태로 남습니다. 무관한 블록 전에 재설정하십시오.
- CMYK 폴백은 근사치입니다. Separation 농도 변환은 별색이 아닌 렌더러가 무언가를 보여 줄 수 있도록 존재합니다. 이는 인쇄기 출력이 아닙니다. 실제 잉크는 명명된 판이 생산하는 것입니다.
- 출력 인텐트는 변환이 아니라 선언입니다.
OutputColorProfile::Srgb를 선언한다고 색상이 sRGB로 변환되지는 않습니다. 의도된 조건을 명시할 뿐입니다. 색상 정확도는 상류에서 여러분의 책임입니다.
각 색상 선택은 단일 콘텐츠 스트림 연산자입니다. 별색은 등록된 잉크당 하나의 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 색상 공간은 농도가 농도 변환을 통해 대체 공간으로 매핑되는 하나의 색재를 명명합니다. | 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 색상, 그리고 출력 인텐트 선언은 프리미엄 게이트가 없는 Core 기능입니다. Core는 여기 표시된 번들 RGB 출력 인텐트 선언을 지원합니다. 사용자 정의 CMYK 인쇄 조건 ICC 워크플로는 이 레시피가 주장하지 않습니다.