PDF/A-4 보존용 출력 생성
한눈에 보기
섹션 제목: “한눈에 보기”이 레시피는 Pro PdfAManager로 PDF/A-4(ISO 19005-4) 보존용 출력을 생성합니다. 저장 시점에 NextPDF는 OutputIntent, 내장 ICC 프로파일, 식별 메타데이터를 예약합니다. NextPDF는 준수를 목표로 하는 출력을 생성하며, 준수 여부는 독립적인 검증기가 판정합니다. 이 레시피는 examples/32-pdfa4-icc.php를 따릅니다.
composer require nextpdf/core:^3composer require nextpdf/proPDF/A-4는 Pro 등급 기능입니다. 코어 전용 설치에서는 enablePdfA()가 InvalidConfigException을 발생시킵니다. 메시지는 누락된 security.pdfa 기능과 composer require nextpdf/pro 해결 방법을 명시합니다. 검증 단계에서는 PATH에 있는 PDF/A 검증기가 필요합니다. 예제에서는 --flavour 4와 함께 veraPDF를 사용합니다.
개념 개요
섹션 제목: “개념 개요”PDF/A-4는 ISO 32000-2(PDF 2.0) 위에 구축된 ISO 19005-4 보존용 프로파일입니다. 준수 파일은 색상 표현이 결정적이며 자체 완결적입니다. 이 파일은 내장 ICC 대상 프로파일을 참조하는 OutputIntent를 선언하므로 외부 리소스 없이 색상이 재현됩니다(§6.2.3). 모든 글꼴 프로그램이 내장됩니다(§6.2.10.4.1). 문서는 XMP에 pdfaid 식별 메타데이터를 담습니다(§6.7.3). 파일은 암호화되지 않습니다(§6.6.4 — PDF/A는 Encrypt 트레일러 키를 금지합니다).
NextPDF는 형식화된 ConformanceMode 열거형을 통해 PDF/A를 모델링합니다. enablePdfA()는 Pro PdfAManager를 인스턴스화하며 기본값은 ConformanceMode::PdfA4입니다. 관리자는 save() 동안 OutputIntent, ICC 스트림, XMP 확장 스키마를 예약합니다. pdfaPart() 및 pdfaConformanceLetter() 판별자는 pdfaid:part / pdfaid:conformance 메타데이터를 선택된 변형(기본 4, 4e, 4f)에 맞춰 정렬된 상태로 유지합니다. 기본 프로파일은 해당 파트의 요구사항에 따라 pdfa:conformance 문자를 내보내지 않습니다.
API 표면
섹션 제목: “API 표면”API 표면은 PHPDoc에서 생성됩니다. 주요 진입점:
\NextPDF\Core\Document::createStandalone(): DocumentDocument::enablePdfA(?object $version = null): static\NextPDF\Support\CapabilityRegistry::getInstance()->get('security.pdfa')->isAvailable(): bool\NextPDF\Conformance\ConformanceMode::PdfA4/PdfA4e/PdfA4fConformanceMode::pdfaPart(): 2|3|4|null및ConformanceMode::pdfaConformanceLetter(): string
코드 샘플 — 빠른 시작
섹션 제목: “코드 샘플 — 빠른 시작”<?php
declare(strict_types=1);
require_once __DIR__ . '/../vendor/autoload.php';
use NextPDF\Core\Document;use NextPDF\Support\CapabilityRegistry;
$out = __DIR__ . '/output/32-pdfa4-icc.pdf';
// Probe before activating a Pro-gated feature so a Core-only install// gets an actionable message instead of a stack trace.$registry = CapabilityRegistry::getInstance();if (!$registry->get('security.pdfa')->isAvailable()) { fwrite(STDERR, "PDF/A-4 requires nextpdf/pro. Run: composer require nextpdf/pro\n"); exit(1);}
$doc = Document::createStandalone();$doc->enablePdfA(); // defaults to ConformanceMode::PdfA4$doc->setTitle('Archival Record 2026-0042');$doc->setLanguage('en');$doc->addPage();$doc->setFont('helvetica', '', 12);$doc->cell(0, 10, 'This document targets PDF/A-4.', newLine: true);$doc->save($out); // PdfAManager emits OutputIntent + ICC + XMP here
echo "Created: output/32-pdfa4-icc.pdf\n";코드 샘플 — 프로덕션
섹션 제목: “코드 샘플 — 프로덕션”이 프로그램은 자체 완결적이며 하니스에서 실행할 수 있습니다. 프로덕션 호출자는 검증기의 판정을 빌드 게이트로 삼습니다. save()가 성공하면 NextPDF가 아티팩트를 내보냈음이 증명되며, 준수는 검증기만 증명합니다.
<?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');
if (!CapabilityRegistry::getInstance()->get('security.pdfa')->isAvailable()) { fwrite(STDERR, "PDF/A-4 requires nextpdf/pro. Run: composer require nextpdf/pro\n"); exit(1);}
try { $doc = Document::createStandalone(); $doc->enablePdfA(); // ConformanceMode::PdfA4
$doc->setTitle('Archival Record 2026-0042'); $doc->setLanguage('en'); $doc->addPage(); $doc->setFont('helvetica', '', 12); $doc->cell(0, 10, 'Long-term archival record. PDF/A-4 (ISO 19005-4).', newLine: true);
// Do NOT call setEncryption(): PDF/A prohibits the Encrypt key and // the call raises an incompatibility exception in either order. $doc->save($out);} catch (InvalidConfigException $e) { fwrite(STDERR, "PDF/A-4 activation failed: {$e->getMessage()}\n"); exit(1);}
$exitCode = 0;$report = [];exec('verapdf --flavour 4 ' . escapeshellarg($out), $report, $exitCode);
if ($exitCode !== 0) { fwrite(STDERR, "veraPDF FAILED — output is not PDF/A-4 conforming\n"); fwrite(STDERR, implode("\n", $report) . "\n"); exit(1);}
echo "veraPDF PASS — archival.pdf is reported PDF/A-4 conforming\n";다음은 nextpdf/pro가 설치되어 있고, verapdf가 파일이 준수한다고 보고하는 호스트에서 예상되는 STDOUT입니다:
veraPDF PASS — archival.pdf is reported PDF/A-4 conforming코어 전용 호스트에서는 프로그램이 STDERR에 PDF/A-4 requires nextpdf/pro. Run: composer require nextpdf/pro를 출력한 뒤 0이 아닌 코드로 종료합니다. verapdf가 문제를 보고하면 프로그램은 veraPDF FAILED — output is not PDF/A-4 conforming을 출력한 뒤 0이 아닌 코드로 종료합니다. 이 문구는 판정을 veraPDF에 귀속시킵니다 — NextPDF는 PDF/A-4 준수를 주장하지 않습니다.
엣지 케이스 및 주의 사항
섹션 제목: “엣지 케이스 및 주의 사항”- Pro 게이트. 코어 전용 설치에서는
enablePdfA()가InvalidConfigException을 던집니다. 메시지는security.pdfa와composer require nextpdf/pro해결 방법을 명시합니다. 명확한 운영자 메시지를 제공하려면 먼저 레지스트리를 조회합니다. - 암호화 충돌. PDF/A 문서에서
setEncryption(),useAesGcm()또는setPublicKeyEncryption()을 호출하면 호출 순서와 관계없이 비호환성 예외가 발생합니다 — PDF/A-4는Encrypt트레일러 키를 금지합니다(ISO 19005-4 §6.6.4). - 준수 변형. Pro
PdfAVersion을enablePdfA()에 전달하여4e(엔지니어링, 3D) 또는4f(파일 첨부)를 지정합니다. 기본 프로파일은pdfa:conformance문자를 내보내지 않으며,4e/4f는E/F를 설정합니다.ConformanceMode판별자는pdfaid:part를 일관되게 유지합니다. - 태깅은 독립적입니다. PDF/A-4 기본은 태깅을 선택 사항으로 취급합니다. 접근 가능하면서 동시에 보존용인 산출물을 만들려면 태그 모드와 PDF/A를 별도로 활성화합니다. PDF/UA-2 레시피를 참조합니다.
- 게이트는 검증기입니다.
save()가 성공했다는 것은 아티팩트가 내보내졌다는 의미일 뿐, 파일이 준수한다는 의미는 아닙니다. 검증기가 통과 판정을 내리기 전에는 PDF/A-4 준수를 단언하지 않습니다.
OutputIntent는 하나의 ICC 프로파일 스트림(sRGB의 경우 수백 KB)과 XMP 패킷을 추가합니다. 문서가 base-14가 아닌 글꼴을 사용할 때는 글꼴 내장이 크기를 좌우합니다. 일반적인 보존용 문서의 경우 이 레시피는 2000 ms / 128 MB 예산 내에 머무릅니다. 의미론적 재현성 프로파일이 적용됩니다. 검증기 지향 산출물은 원시 바이트가 아니라 구조적 AST와 메타데이터로 비교됩니다.
보안 참고 사항
섹션 제목: “보안 참고 사항”데이터 레지던시 및 PII 완화
섹션 제목: “데이터 레지던시 및 PII 완화”보존용 출력은 설계상 수명이 길고 자체 완결적입니다. 콘텐츠에 포함된 모든 개인 데이터는 아카이브 수명 동안 유지됩니다. 내장 ICC 프로파일과 메타데이터는 파일과 함께 이동합니다. 아카이브하기 전에 보존 및 최소화 정책을 적용해야 합니다. PDF/A-4에는 편집(redaction) 의미론이 없습니다.
안전한 텔레메트리 및 로그 정리
섹션 제목: “안전한 텔레메트리 및 로그 정리”이 레시피는 고정된 진행 상황 줄만 기록합니다. veraPDF 출력에는 콘텐츠 조각이 포함될 수 있으므로, 민감한 콘텐츠가 있는 문서의 경우 검증기 로그를 공유 로그 싱크에서 제외해야 합니다.
위협 모델
섹션 제목: “위협 모델”PDF/A-4는 보존 충실도 프로파일이며 무결성 또는 진위성 제어가 아닙니다. 이 프로파일은 파일에 서명하거나 변조 증거를 제공하지 않습니다. 출처가 중요할 때는 서명과 결합해야 합니다. 별도의 레시피가 서명을 다룹니다. 암호화는 명세상 PDF/A와 상호 배타적입니다.
FIPS 모드 동작
섹션 제목: “FIPS 모드 동작”이 레시피는 암호화 연산을 수행하지 않습니다. FIPS 모드는 이 동작을 변경하지 않습니다. PDF/A-4는 암호화를 금지하므로 어떤 암호도 선택되지 않습니다.
| 진술 | 명세 | 절 | reference_id (참조 ID) |
|---|---|---|---|
| PDF/A-4는 내장 ICC 프로파일을 참조하는 OutputIntent를 요구합니다. | ISO 19005-4 | §6.2.3 | |
| 색상은 출력 대상 프로파일을 통해 장치 독립적입니다. | ISO 19005-4 | §6.2.4.3 | |
| 모든 글꼴 프로그램이 내장됩니다. | ISO 19005-4 | §6.2.10.4.1 | |
| 문서는 XMP에 pdfaid 식별 정보를 담습니다. | ISO 19005-4 | §6.7.3 | |
| PDF/A-4에서는 암호화가 금지됩니다. | ISO 19005-4 | §6.6.4 | |
| 생성기가 아니라 검증기가 준수를 판정합니다. | ISO 19005-4 | §6.7.3 |
NextPDF는 PDF/A-4를 준수하도록 의도된 출력을 생성합니다. 지원은 준수가 아니며, 테스트된 프로파일은 인증이 아닙니다. 이 레시피는 준수를 단언하지 않으며, 독립적인 검증기(예: veraPDF)가 그 판정을 내립니다. 그 판정을 빌드 게이트로 삼습니다.