콘텐츠로 이동

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 속성은 “그 자체만으로는 적합성을 결정하지 않습니다”.

Terminal window
composer require nextpdf/core:^3
composer require nextpdf/pro # OutputIntent + ICC + XMP authoring

Core의 security.pdfa 기능은 등록되어 있지만 nextpdf/pro 없이는 사용 불가로 보고됩니다. 이 경우 enablePdfA()는 비적합 파일을 생성하지 않고, 업그레이드 경로와 함께 InvalidConfigException을 던집니다.

Document::enablePdfA(?object $version = null)PdfAVersion 열거형 입력을 ConformanceMode 케이스에 매핑합니다. 입력이 인식되지 않으면 ConformanceMode::PdfA4를 기본값으로 사용합니다('4e' → PdfA4e, '4f' → PdfA4f). 이 모드는 표준이 적합 파일에 부과하는 세 가지 생성 의무를 처리합니다:

  • OutputIntent + ICC — §6.2.3은 적합 파일이 DestOutputProfile ICC 스트림을 참조하는 PDF/A-4 OutputIntent로 색상 특성을 지정할 수 있도록 허용합니다. §6.2.4.1에 따르면 이는 장치 독립적 색상을 지정하는 두 가지 허용 경로 중 하나입니다(다른 하나는 장치 독립적 색 공간을 직접 지정하는 것). 따라서 OutputIntent는 NextPDF가 선택한 경로일 뿐, 표준상 무조건적 요구사항은 아닙니다.
  • pdfaid 식별 — §6.7.3은 문서 수준 XMP에 PDF/A 식별 스키마(AIIM pdfaid 네임스페이스)를 두어 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은 그 판정을 해당 프로세스에 맡깁니다.

메서드효과
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에 따라 FUF 키(Desc 권장)를 가져야 합니다. 이는 ZUGFeRD/Factur-X 하이브리드 경로의 기반이 됩니다.

OutputIntent + ICC 내장은 save() 시점에 고정 크기의 ICC 스트림(작업 공간 프로파일)과 XMP 패킷을 추가합니다. 일반적인 문서의 경우 실제 경과 시간 ≤ 1500 ms, 피크 ≤ 128 MB로 예산이 책정되어 있습니다.

PDF/A-4는 암호화를 금지합니다. 이 프로파일은 archival/longevity 제약일 뿐 보안 통제가 아닙니다. 키 보관 및 검증기 정책은 이 프로파일의 범위를 벗어납니다; 트러스트 센터를 참조하십시오.

PDF/A-4 생성은 프로세스 내에서 이루어지며 문서와 내장 ICC 프로파일, XMP 패킷만 기록합니다. 어떤 콘텐츠도 프로세스를 벗어나지 않습니다. 소스 콘텐츠의 PII는 통합자의 책임입니다 — 이 프로파일은 편집(redact)하지 않습니다.

안전한 텔레메트리 & 로그 스크러빙

섹션 제목: “안전한 텔레메트리 & 로그 스크러빙”

이 예제는 출력 경로와 검증기 명령만 STDERR에 기록합니다. 어떤 문서 바이트도 로깅되지 않습니다. 이 레시피는 NEXTPDF_COOKBOOK_OUTPUT을 존중하며 PDF를 STDOUT으로 출력하지 않습니다.

PDF/A-4 파일에는 접근 제어가 적용되지 않습니다. 파일을 가진 사람은 누구나 이를 읽을 수 있습니다; 이 프로파일이 보장하는 것은 기밀성이 아니라 렌더링의 영속성입니다. OutputIntent ICC 스트림은 공개된 것으로 취급하십시오.

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의 표현으로 요약됩니다.