ISO 19005-4 (PDF/A-4): NextPDF 기능 매핑
한눈에 보기
섹션 제목: “한눈에 보기”ISO 19005-4:2020(PDF/A-4)은 PDF 2.0 아카이브 프로파일입니다. 이 페이지는 이를 NextPDF에 있는 그대로 매핑합니다. 즉, Core가 내보내는 항목, nextpdf/pro 확장이 추가하는 항목, NextPDF가 명시적으로 다루지 않는 항목을 다룹니다. NextPDF는 PDF/A-4 관련 구조를 내보냅니다. 파일이 적합한지는 검증기만 단언할 수 있습니다.
composer require nextpdf/core:^3# PDF/A-4 file authoring (OutputIntent + ICC + XMP) requires:# composer require nextpdf/pro개념 개요
섹션 제목: “개념 개요”ISO 19005-4:2020은 ISO 32000-1:2008(PDF 1.7)을 기반으로 하는 PDF/A-2 및 PDF/A-3과 달리 ISO 32000-2:2020(PDF 2.0)을 기반으로 합니다. NextPDF는 이 계보 차이를 ConformanceMode::requiresPdf17()에 인코딩합니다. 이 메서드는 PDF/A-4의 모든 경우에는 false를, PDF/A-2 및 PDF/A-3에는 true를 반환합니다.
PDF/A-4는 세 가지 적합성 형태를 정의합니다. 기본 프로파일에는 pdfa:conformance 문자가 없습니다. PDF/A-4e(부속서 B, 엔지니어링 / 3D 콘텐츠)는 pdfa:conformance = E를 설정합니다. PDF/A-4f(부속서 A, 내장 파일)는 pdfa:conformance = F를 설정합니다. ISO 19005-4:2020 §6.7.3은 AIIM 네임스페이스에서 PDF/A 식별 스키마를 규정합니다. 이 조항은 PDF/A-4e도 PDF/A-4f도 아닌 파일이 pdfa:conformance 항목을 제공하지 않도록 지시합니다. NextPDF는 이를 ConformanceMode::pdfaConformanceLetter()에 정확히 반영합니다. PdfA4는 빈 문자열을, PdfA4e는 E를, PdfA4f는 F를 반환합니다.
중요한 에디션 경계는 다음과 같습니다. PDF/A-4 파일 작성 — OutputIntent 딕셔너리, 내장 ICC 프로파일, XMP 확장 스키마, 글꼴 서브셋 보장, 그리고 암호화 금지 —은 Enterprise PdfAManager에 구현되어 있습니다. Enterprise PdfAManager는 nextpdf/pro 확장에 포함되어 제공됩니다. Core 전용 설치에서는 Document::enablePdfA()가 InvalidConfigException을 발생시키며, 이는 security.pdfa 기능이 등록되어 있지 않기 때문입니다. 실행 가능한 예제(examples/32-pdfa4-icc.php)는 기능 레지스트리를 확인하고, 스택 추적 대신 명확한 메시지로 정상적으로 저하 처리해 이를 보여 줍니다.
따라서 Core 단독에서는 PDF/A-4 표면이 판별자 전용입니다. 즉, NextPDF는 문서가 선언하는 PDF/A-4 변형을 기록합니다. NextPDF는 스키마가 정의하는 pdfaid:part = 4 / pdfa:conformance 마커를 내보냅니다. 완전한 PDF/A-4 파일을 생성하는 것과 그 파일이 적합한지 검증하는 것은 별개의 단계입니다. 첫 번째 단계에는 nextpdf/pro가 필요합니다. 두 번째 단계에는 veraPDF가 필요합니다.
API 표면
섹션 제목: “API 표면”| 표면 | 에디션 | 제공 내용 |
|---|---|---|
ConformanceMode::PdfA4 / PdfA4e / PdfA4f | core | 변형 판별자 |
ConformanceMode::pdfaPart() → 4 | core | ISO 19005 파트 번호 |
ConformanceMode::pdfaConformanceLetter() → '' / 'E' / 'F' | core | §6.7.3 적합성 문자 |
ConformanceMode::requiresPdf17() → false | core | PDF 2.0 계보 게이트 |
Document::enablePdfA() | pro | OutputIntent + ICC + XMP 작성. Core에서는 InvalidConfigException을 발생시킴 |
코드 샘플 — 빠른 시작
섹션 제목: “코드 샘플 — 빠른 시작”<?php
declare(strict_types=1);
use NextPDF\Conformance\ConformanceMode;
// Core: introspect the declared PDF/A-4f contract.$mode = ConformanceMode::PdfA4f;$mode->pdfaPart(); // 4$mode->pdfaConformanceLetter(); // 'F' (ISO 19005-4:2020 §6.7.3 / Annex A)$mode->requiresPdf17(); // false (PDF/A-4 is PDF 2.0 lineage)코드 샘플 — 프로덕션
섹션 제목: “코드 샘플 — 프로덕션”<?php
declare(strict_types=1);
use NextPDF\Core\Document;use NextPDF\Exception\InvalidConfigException;use NextPDF\Support\CapabilityRegistry;
// PDF/A-4 file authoring requires the Premium extension. Probe first so a// Core-only install gets a clear rationale, not a stack trace.$registry = CapabilityRegistry::getInstance();if (!$registry->get('security.pdfa')->isAvailable()) { throw new InvalidConfigException( configKey: 'security.pdfa', givenValue: 'Core-only install', expectedType: 'nextpdf/pro extension (Enterprise PdfAManager)', );}
$doc = Document::createStandalone();$doc->enablePdfA(); // Emits OutputIntent + ICC + pdfaid XMP (Premium).// … write content …$doc->save(__DIR__ . '/out/archive-a4.pdf');
// The file now CARRIES PDF/A-4 structures. Conformance is still unproven// until veraPDF asserts it://// verapdf --flavour 4 out/archive-a4.pdf엣지 케이스 및 주의 사항
섹션 제목: “엣지 케이스 및 주의 사항”- Core는 PDF/A-4 파일을 작성할 수 없습니다. Core에서는
enablePdfA()가 예외를 발생시킵니다. 판별자와 XMP 마커만 Core 표면에 포함됩니다. - 기본 PDF/A-4는
pdfa:conformance를 내보내지 않습니다. ISO 19005-4:2020 §6.7.3에 따라 PDF/A-4e와 PDF/A-4f만 해당 문자를 설정합니다.ConformanceMode::PdfA4는 설계상 빈 문자열을 반환합니다. - PDF 1.7이 아닌 PDF 2.0 계보입니다. 흔한 오류는
%PDF-1.7을 기대하는 PDF/A-3 파이프라인을 재사용하는 것입니다. PDF/A-4는 PDF 2.0입니다.requiresPdf17()는 PDF/A-4의 모든 경우에false를 반환합니다. - ICC 검증은 Premium입니다. ISO 19005-4:2020 §6.2.2 OutputIntent ICC 검증(
acsp매직, 태그 테이블, D50 백색점)은 Core가 아닌 EnterprisePdfAManager의 역할입니다. - 라이브러리는 파일을 인증하지 않습니다.
PdfA4f를 설정하고 마커를 내보낸다고 해서 출력이 유효한 PDF/A-4f 파일이 되는 것은 아닙니다. veraPDF를 실행하십시오.
Core PDF/A-4 표면은 순수 값 타입 인트로스펙션입니다(enum match 디스패치, O(1), 할당 없음). Premium 작성 경로는 쓰기 작업에 OutputIntent와 ICC 패킷을 추가합니다. 그 비용은 내장 프로파일의 크기이며, 라이터 예산 내에서 처리됩니다. veraPDF 검증은 생성 단계에 포함되지 않는 대역 외 단계입니다.
보안 참고 사항
섹션 제목: “보안 참고 사항”PDF/A-4는 암호화를 금지합니다. Enterprise PdfAManager는 암호화 금지 불변식을 강제합니다. Enterprise PdfAManager는 이 불변식을 enablePdfA() 호출을 기준으로 적용해, 호출자가 실수로 AES-GCM과 아카이브 모드를 결합할 수 없도록 합니다. HasSecurity::enablePdfA()에 있는 Core의 사전 가드는 어떤 바이트도 기록되기 전에 지원되지 않는 조합을 거부합니다. 아카이브 파이프라인 세부 사항은 프로젝트 위협 모델을 참조하십시오.
적합성
섹션 제목: “적합성”이것은 적합성 주장이 아니라 기능 매핑입니다.
| ISO 19005-4:2020 영역 | 조항 | NextPDF 지원 범위 | 상태 |
|---|---|---|---|
| 변형 식별 스키마 | §6.7.3 | ConformanceMode가 pdfaid:part = 4와 pdfa:conformance 문자를 내보냄 | 주장됨 (Core; tests/Unit/Conformance/에서 단위 테스트됨) |
| PDF 2.0 계보 게이트 | §6.7.3 / 기본 | requiresPdf17()가 모든 PDF/A-4 경우에 false를 반환함 | 검증됨 (단위 테스트됨) |
| OutputIntent + 내장 ICC | §6.2.2 | Enterprise PdfAManager (nextpdf/pro) 컴포넌트 | Premium 전용 (Core 아님) |
| XMP 확장 스키마, 글꼴 서브셋, 암호화 금지 | §6 / 부속서 A/B | Enterprise PdfAManager (nextpdf/pro) 컴포넌트 | Premium 전용 (Core 아님) |
| 적합성 판정 | 조항 5 | NextPDF가 수행하지 않음 — veraPDF | 명시적 미지원 |
지원은 적합성이 아니며, 이 페이지는 둘을 의도적으로 구분합니다. (a) NextPDF Core는 ISO 19005-4:2020 §6.7.3이 변형 식별을 위해 정의하는 구조를 내보냅니다. 이는 구현이며, tests/Unit/Conformance/ConformanceModePdfAVariantTest.php(통과)로 입증됩니다. (b) 파일이 PDF/A-4에 적합한지는 ISO 19005-4:2020 조항 5에 따라 검증기만 내릴 수 있는 별도의 단언입니다. 조항 5는 적합성의 실제 판정이 검사 도구에 의해 규범적 요구사항을 기준으로 수행된다고 명시합니다. NextPDF는 주장 (a)를 합니다. NextPDF는 주장 (b)를 하지 않습니다. veraPDF로 검증하십시오(verapdf --flavour 4 …, 또는 오라클 하네스의 경우 php oracle/run.php — 이는 veraPDF 바이너리가 있을 때만 실행되는 옵트인 게이트입니다).
“PDF/A-4 준수”, “완전 적합”, “PDF/A-4 인증”이라는 문구는 이 페이지에서 의도적으로 제외되어 있습니다. NextPDF는 PDF/A-4 관련 구조를 내보냅니다. 적합한 파일을 보장하지는 않습니다.
인용문은 NextPDF 컴플라이언스 코퍼스에서 의역한 것입니다. 전체 64자 reference_id 다이제스트는 페이지 프런트매터와 docs/public/modules/core/_normative-evidence-conf.md에 기록되어 있습니다.
관련 항목
섹션 제목: “관련 항목”- Conformance 모듈 —
ConformanceMode라우팅과 veraPDF 오라클 - Compliance 모듈 — PDF/R-1 검증기와 Arlington 문법
- PDF/UA-2 사양 매핑 — 접근성 프로파일에 대응하는 항목