PDF/A-4 적합성: NextPDF가 ISO 19005-4를 위해 생성하는 것
한눈에 보기
섹션 제목: “한눈에 보기”경계 진술. NextPDF는 PDF/A-4에 적합하도록 의도된 출력을 생성합니다; 라이브러리는 적합성을 단언하지 않으며 — 검증기(예를 들어 veraPDF)가 결정합니다.
PDF/A-4는 ISO 19005-4:2020, 즉 PDF 2.0 기반의 보존용 프로파일입니다. NextPDF Core는 ConformanceMode 판별자(PdfA4, PdfA4e, PdfA4f)를 보유합니다. Premium nextpdf/pro 엔진은 OutputIntent, 내장 ICC 프로파일, 그리고 XMP pdfaid 식별 스키마를 save() 중에 생성합니다. 라이브러리는 아티팩트를 생성하고, 적합성 판정은 veraPDF가 수행합니다. ISO 19005-4 §6.7.3은 명확합니다: pdfaid:part/pdfaid:rev 속성은 “그 자체만으로는 적합성을 결정하지 않습니다”.
composer require nextpdf/core:^3composer require nextpdf/pro # OutputIntent + ICC + XMP authoringCore의 security.pdfa 기능은 등록되어 있지만 nextpdf/pro 없이는 사용 불가로 보고됩니다. 이 경우 enablePdfA()는 비적합 파일을 생성하지 않고, 업그레이드 경로와 함께 InvalidConfigException을 던집니다.
개념 개요
섹션 제목: “개념 개요”Document::enablePdfA(?object $version = null)는 PdfAVersion 열거형 입력을 ConformanceMode 케이스에 매핑합니다. 입력이 인식되지 않으면 ConformanceMode::PdfA4를 기본값으로 사용합니다('4e' → PdfA4e, '4f' → PdfA4f). 이 모드는 표준이 적합 파일에 부과하는 세 가지 생성 의무를 처리합니다:
- OutputIntent + ICC — §6.2.3은 적합 파일이
DestOutputProfileICC 스트림을 참조하는 PDF/A-4 OutputIntent로 색상 특성을 지정할 수 있도록 허용합니다. §6.2.4.1에 따르면 이는 장치 독립적 색상을 지정하는 두 가지 허용 경로 중 하나입니다(다른 하나는 장치 독립적 색 공간을 직접 지정하는 것). 따라서 OutputIntent는 NextPDF가 선택한 경로일 뿐, 표준상 무조건적 요구사항은 아닙니다. pdfaid식별 — §6.7.3은 문서 수준 XMP에 PDF/A 식별 스키마(AIIMpdfaid네임스페이스)를 두어pdfaid:part/pdfaid:rev를 담을 것을 요구합니다. PDF/A-4e 및 PDF/A-4f는 추가로pdfa:conformance(E / F)를 설정합니다. §6.7.3은 또한 어느 쪽에도 적합하지 않은 파일이pdfa:conformance값을 제공해서는 안 된다고 명시합니다.- 글꼴 내장 — §6.2.10은 렌더링에 사용되는 모든 글꼴을 내장하도록 요구합니다.
NextPDF는 이 요소들을 생성하지만 §5 적합성 판정은 수행하지 않습니다. 이는 veraPDF의 역할이며, §6.7.3은 그 판정을 해당 프로세스에 맡깁니다.
API 표면
섹션 제목: “API 표면”| 메서드 | 효과 |
|---|---|
enablePdfA(?object $version = null): static | 요청을 ConformanceMode::PdfA4/PdfA4e/PdfA4f로 라우팅하고, save() 시점에 OutputIntent + ICC + XMP를 예약합니다. nextpdf/pro가 없을 때 던지는 예외는 InvalidConfigException|PageLayoutException|CompressionException입니다. |
ConformanceMode::pdfaPart(): ?int | 활성 모드의 ISO 19005 파트를 반환합니다(PdfA4*의 경우 4). |
ConformanceMode::pdfaConformanceLetter(): string | 반환값은 pdfa:conformance 문자(E / F)이거나 빈 값입니다. |
코드 예제 — 빠른 시작
섹션 제목: “코드 예제 — 빠른 시작”<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;use NextPDF\Exception\InvalidConfigException;use NextPDF\Support\CapabilityRegistry;
$out = getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: __DIR__ . '/archival.pdf';
$registry = CapabilityRegistry::getInstance();if (!$registry->get('security.pdfa')->isAvailable()) { fwrite(STDERR, "PDF/A-4 requires nextpdf/pro.\n"); exit(1);}
try { $doc = Document::createStandalone(); $doc->enablePdfA(); // ConformanceMode::PdfA4 $doc->setTitle('Archival Record 2026-0042'); $doc->setLanguage('en'); $doc->writeHtml('<h1>Archival record</h1><p>Body.</p>'); $doc->save($out); // OutputIntent + ICC + XMP scheduled here} catch (InvalidConfigException $e) { fwrite(STDERR, $e->getMessage() . "\n"); exit(1);}
echo "Wrote {$out} — validate: verapdf --flavour 4 {$out}\n";코드 예제 — 프로덕션
섹션 제목: “코드 예제 — 프로덕션”검증기 판정을 빌드 게이트로 삼으십시오. 출력물에 대해 verapdf --flavour 4를 실행하고 0이 아닌 종료 코드에서 빌드를 실패시키십시오. 검증기의 판정이 게이트이며 — 라이브러리가 만든 결과물은 그 입력일 뿐, 결코 판정 자체가 아닙니다. 전체 게이트 파이프라인은 적합성 게이트 레시피 /cookbook/php/pdfa4-conformance-gate/를 참조하십시오.
엣지 케이스 & 주의 사항
섹션 제목: “엣지 케이스 & 주의 사항”- 콘텐츠 전에 활성화. 콘텐츠를 추가하기 전에
enablePdfA()를 호출하십시오; 나중에 활성화해도 이미 작성된 객체를 다시 처리하지 않습니다. - 암호화 금지. PDF/A는
Encrypt키를 금지합니다. PDF/A 문서에서setEncryption()을 호출하지 마십시오. 암호화는 기밀성을 위한 것이지 보존 무결성을 위한 것이 아니며, 여기서 둘은 상호 배타적입니다. pdfa:conformance는 조건부. PDF/A-4e와 PDF/A-4f만 이를 설정합니다. 일반 PDF/A-4 파일에서 이를 생성하는 것 자체가 적합성 위반(§6.7.3)이며 —ConformanceMode케이스가 설계상 이를 방지합니다.- PDF/A-4f 첨부 파일. PDF/A-4f 파일의 내장 파일은 §6.7.5에 따라
F및UF키(Desc 권장)를 가져야 합니다. 이는 ZUGFeRD/Factur-X 하이브리드 경로의 기반이 됩니다.
OutputIntent + ICC 내장은 save() 시점에 고정 크기의 ICC 스트림(작업 공간 프로파일)과 XMP 패킷을 추가합니다. 일반적인 문서의 경우 실제 경과 시간 ≤ 1500 ms, 피크 ≤ 128 MB로 예산이 책정되어 있습니다.
보안 참고 사항
섹션 제목: “보안 참고 사항”PDF/A-4는 암호화를 금지합니다. 이 프로파일은 archival/longevity 제약일 뿐 보안 통제가 아닙니다. 키 보관 및 검증기 정책은 이 프로파일의 범위를 벗어납니다; 트러스트 센터를 참조하십시오.
데이터 레지던시 & PII 완화
섹션 제목: “데이터 레지던시 & PII 완화”PDF/A-4 생성은 프로세스 내에서 이루어지며 문서와 내장 ICC 프로파일, XMP 패킷만 기록합니다. 어떤 콘텐츠도 프로세스를 벗어나지 않습니다. 소스 콘텐츠의 PII는 통합자의 책임입니다 — 이 프로파일은 편집(redact)하지 않습니다.
안전한 텔레메트리 & 로그 스크러빙
섹션 제목: “안전한 텔레메트리 & 로그 스크러빙”이 예제는 출력 경로와 검증기 명령만 STDERR에 기록합니다. 어떤 문서 바이트도 로깅되지 않습니다. 이 레시피는 NEXTPDF_COOKBOOK_OUTPUT을 존중하며 PDF를 STDOUT으로 출력하지 않습니다.
위협 모델
섹션 제목: “위협 모델”PDF/A-4 파일에는 접근 제어가 적용되지 않습니다. 파일을 가진 사람은 누구나 이를 읽을 수 있습니다; 이 프로파일이 보장하는 것은 기밀성이 아니라 렌더링의 영속성입니다. OutputIntent ICC 스트림은 공개된 것으로 취급하십시오.
FIPS 모드 동작
섹션 제목: “FIPS 모드 동작”PDF/A-4 생성은 어떤 암호화 연산도 수행하지 않습니다. PDF/A-4 파일에 대한 디지털 서명(PDF/A-4 §6.5은 PAdES 프로파일을 허용)은 별도의 서명 레시피에서 다룰 사안이며 그 레시피의 FIPS 태세를 상속합니다. 이 페이지는 서명에 관한 어떤 주장도 하지 않습니다.
적합성
섹션 제목: “적합성”| 주장 | 명세 | 조항 | reference_id |
|---|---|---|---|
| PDF/A-4 파일은 DestOutputProfile ICC 프로파일을 참조하는 PDF/A OutputIntent로 색상 특성을 지정할 수 있습니다. | ISO 19005-4 | §6.2.3 | |
| 장치 독립적 색상은 직접 지정하거나 OutputIntent DestOutputProfile을 통해 간접적으로 지정할 수 있습니다(두 가지 허용 경로 중 하나). | ISO 19005-4 | §6.2.4.1 | |
| PDF/A 버전은 문서 XMP의 PDF/A 식별(pdfaid) 스키마를 통해 식별됩니다. | ISO 19005-4 | §6.7.3 | |
| pdfaid:part / pdfaid:rev은 그 자체만으로는 적합성을 결정하지 않으며, 판정은 Clause 5에 따라 수행됩니다. | ISO 19005-4 | §6.7.3 | |
| PDF/A-4e에도 PDF/A-4f에도 적합하지 않은 파일은 pdfa:conformance 값을 제공해서는 안 됩니다. | ISO 19005-4 | §6.7.3 | |
| PDF/A-4f 내장 파일은 F 및 UF 키(Desc 권장)가 필요합니다. | ISO 19005-4 | §6.7.5 | |
| 렌더링에 사용되는 모든 글꼴은 내장되어야 합니다. | ISO 19005-4 | §6.2.10 | |
| 투명도 / 색상 사용은 선언된 OutputIntent에 의존합니다. | ISO 19005-4 | §6.2.9 |
인용은 검증 코퍼스를 가리키는 조항 ID + reference_id 포인터입니다. 표준 텍스트는 재현하지 않으며, 조항은 NextPDF의 표현으로 요약됩니다.