PDF/UA-2 적합성: NextPDF 가 ISO 14289-2 를 위해 생성하는 태그 구조
한눈에 보기
섹션 제목: “한눈에 보기”경계 진술. NextPDF 는 다음을 지원하는 태그 구조를 생성합니다. 바로 접근 가능한 저작입니다. NextPDF 는 PDF/UA-2 적합성을 주장하지 않으며, 적합성은 검사기가 판정합니다.
PDF/UA-2 는 ISO 14289-2:2024 이며, 태그가 지정된 PDF 2.0 위에 계층화된 접근성 프로파일입니다. NextPDF Core 는 Document::enableTaggedPdf()를 통해 구조 트리, 표시된 콘텐츠, catalog/structure 언어, 그리고 pdfuaid 마커를 생성합니다. 라이브러리는 접근 가능한 구조를 생성하지만, 적합성을 결정하는 것은 PDF/UA 검사기(예: verapdf --flavour ua2)입니다. ISO 14289-2 §8.1 은 적합성을 문서가 충족해야 하는 일련의 파일 형식 요구 사항으로 규정합니다. 이는 생산자가 선언하는 것이 아니라 검사기가 평가합니다.
composer require nextpdf/core:^3PDF/UA-2 태그 지정은 Core 기능입니다(security.tagged_pdf). 태그 구조 자체에는 Premium 패키지가 필요하지 않습니다.
개념 개요
섹션 제목: “개념 개요”Document::enableTaggedPdf(string $lang = 'en', ?ConformancePolicy $policy = null)는 ConformanceMode::PdfUa2를 설정하고 TaggedContentEmitter를 연결합니다. 이 모드는 “이 문서가 사양에 따라 태그가 지정되었는가”에 대한 단일 진실 공급원이며, 작성기는 이를 바탕으로 ISO 14289-2 가 부과하는 구조적 의무를 충족합니다.
- 실제 콘텐츠는 태그가 지정됩니다 — §8.2.2: 모든 실제(비아티팩트) 콘텐츠는 논리 구조에 포함되며, 아티팩트는 그에 맞게 표시됩니다. 이는 ISO 32000-2 §14.7 태그 PDF 구조(
StructTreeRoot, 구조 요소, MCID)를 기반으로 구축됩니다. - 자연어가 선언됩니다 — §8.4.4: 문서와 언어 전환은
Lang을 포함합니다.ConformancePolicy::strictUa2()를 사용하면, 잘못된 형식의 BCP-47 태그는 쓰기 시점에 자동으로 폐기되지 않고 API 경계에서 거부됩니다(빠른 실패). - 그림은 대체 설명을 포함합니다 — §8.5.1: 모든
Figure구조 요소에는 대체 설명이 있습니다. - 표는 헤더와 데이터를 연결합니다 — §8.2.5.26: 표의 header/data 셀 연결은 구조적으로 표현됩니다.
NextPDF 는 이러한 구조를 생성합니다. §8.1 적합성 평가는 수행하지 않습니다. 이는 검사기의 역할이며, 표준은 이 판단을 검사기에 맡깁니다.
API 표면
섹션 제목: “API 표면”| 메서드 | 효과 |
|---|---|
enableTaggedPdf(string $lang = 'en', ?ConformancePolicy $policy = null): static | 이 메서드는 ConformanceMode::PdfUa2를 설정하고, TaggedContentEmitter를 연결하며, 정책에 따라 $lang을 검증합니다. InvalidConfigException은 정책이 Lang 검증을 요구하고 $lang이 유효하지 않은 경우 발생합니다. |
beginTag()/endTag() | 비 HTML 콘텐츠를 위한 수동 구조입니다. 컨테이너 유형은 그룹화 요소가 되며, 리프 유형은 MCID 를 받습니다. |
ConformanceMode::requiresPdfUa2PageTabs(): bool | 값은 PdfUa2의 경우 true 이며, /Tabs /S 페이지 적용을 구동합니다. |
코드 샘플 — 빠른 시작
섹션 제목: “코드 샘플 — 빠른 시작”<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;use NextPDF\Conformance\ConformancePolicy;
$out = getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: __DIR__ . '/accessible.pdf';
$doc = Document::createStandalone();$doc->enableTaggedPdf('en', ConformancePolicy::strictUa2()); // fail-fast Lang$doc->setTitle('Accessible report 2026');$doc->writeHtml('<h1>Quarterly report</h1><p>Body text.</p>' . '<img src="chart.png" alt="Revenue rose 12% quarter on quarter">');$doc->save($out);
echo "Wrote {$out} — validate: verapdf --flavour ua2 {$out}\n";코드 샘플 — 프로덕션
섹션 제목: “코드 샘플 — 프로덕션”프로덕션 게이트는 verapdf --flavour ua2 out.pdf를 실행하고, 보고된 위반 사항이 있으면 빌드를 실패시킵니다. 통합 테스트 tests/Integration/Accessibility/VeraPdfUa2GoldenTest.php는 HTML→태그 PDF 골든 픽스처가 veraPDF UA-2 를 통과하는지 검증합니다(veraPDF 가 없으면 건너뜁니다). 검사기의 판정이 게이트이며, 이미터 출력은 그 입력값입니다.
엣지 케이스 및 주의 사항
섹션 제목: “엣지 케이스 및 주의 사항”- 먼저 활성화하십시오.
enableTaggedPdf()를writeHtml()이후에 호출해도 이미 작성된 콘텐츠에는 소급하여 태그가 지정되지 않습니다. - 엄격한 언어.
ConformancePolicy::strictUa2()를 전달하면, 잘못된 형식의 BCP-47 태그가 사후 veraPDF 검증에서만 실패하게 두지 않고 API 경계에서 거부할 수 있습니다. - 멱등적 재활성화. 두 번 호출하면 채워진 구조 트리를 다시 빌드하지 않고 언어만 업데이트합니다.
- 빈 태그 문서. 빈 태그 문서는 PDF/UA-2 를 광고하지 않습니다(
EmptyTaggedPdfDoesNotAdvertisePdfUa2Test). 실제 콘텐츠가 없는 문서에는 마커가 생성되지 않으므로, 파일이 과도한 주장을 하지 않습니다.
구조 트리 생성 비용은 요소 수에 비례합니다. 일반적인 보고서의 경우 벽시계 시간 ≤ 1500 ms, 최대 메모리 ≤ 64 MB 로 예산이 책정됩니다.
보안 참고 사항
섹션 제목: “보안 참고 사항”접근성 태그 지정은 구조적 기능이며, 보안 통제가 아닙니다. 이는 의도적으로 문서의 논리 구조를 보조 기술에 노출하며, 태그 트리에는 기밀성 측면이 없습니다.
PDF/UA-2 매핑
섹션 제목: “PDF/UA-2 매핑”| PDF/UA-2 의무 | ISO 14289-2 조항 | NextPDF 생성 |
|---|---|---|
| 논리 구조에 태그가 지정된 실제 콘텐츠 | §8.2.2 | TaggedContentEmitter + StructureTree |
| 선언된 문서/구조 언어 | §8.4.4 | catalog /Lang, 검증기 Bcp47Validator |
| Figure 대체 설명 | §8.5.1 | alt → /Alt (Figure 요소) |
| 표 header/data 연결 | §8.2.5.26 | HTML 표에서 생성된 TR/TH/TD 구조 |
태그 → ISO 32000-2 §14.9 상호 참조
섹션 제목: “태그 → ISO 32000-2 §14.9 상호 참조”PDF/UA-2 는 ISO 32000-2 태그 PDF 모델 위에 계층화됩니다. NextPDF 가 생성하는 구조 요소는 ISO 32000-2 §14.7 논리 구조(StructTreeRoot, 구조 요소, MCID) — chunk — 및 PDF 2.0 용으로 정의된 표준 구조 네임스페이스를 기준으로 해석됩니다. 역할 맵은 HTML 요소(h1, p, table)를 표준 구조 유형에 연결하여 UA-2 검사기가 이를 인식하도록 합니다.
WCAG 2.2 매핑
섹션 제목: “WCAG 2.2 매핑”태그 구조는 WCAG 2.2 성공 기준의 기술적 기반입니다 — 1.1.1(비텍스트 대체, §8.5.1 Figure /Alt를 통해), 1.3.1(정보 및 관계, 구조 트리를 통해), 1.3.2(의미 있는 순서, 읽기 순서를 통해). 구조 생성은 WCAG 적합성에 필요하지만 그것만으로 충분하지는 않습니다. 그 판정은 라이브러리가 아니라 접근성 감사가 내립니다.
FIPS 모드 동작
섹션 제목: “FIPS 모드 동작”PDF/UA-2 생성은 어떠한 암호화도 수행하지 않습니다. FIPS 모드는 태그 구조 경로에 영향을 미치지 않습니다.
적합성
섹션 제목: “적합성”| 주장 | 사양 | 조항 | 참조 ID |
|---|---|---|---|
PDF/UA 버전은 pdfuaid 스키마 네임스페이스로 식별됩니다(표 1). | ISO 14289-2 | §5 | |
| PDF/UA-2 적합성은 문서가 충족해야 하는 파일 형식 요구 사항을 부과합니다(적합성은 검사기가 평가하며, 생산자가 선언하지 않습니다). | ISO 14289-2 | §8.1 | |
| 실제 콘텐츠는 논리 구조에 태그가 지정되어야 합니다. | ISO 14289-2 | §8.2.2 | |
| 문서의 자연어는 선언되어야 합니다. | ISO 14289-2 | §8.4.4 | |
| Figure 요소에는 대체 설명이 필요합니다. | ISO 14289-2 | §8.5.1 | |
| 표 구조는 헤더 셀과 데이터 셀을 연결해야 합니다. | ISO 14289-2 | §8.2.5.26 | |
| 접근 가능한 구조는 ISO 32000-2 태그 PDF 논리 구조를 기반으로 구축됩니다. | ISO 32000-2 | §14.7.2 |
인용은 검증 코퍼스를 가리키는 clause-id + reference_id 포인터입니다. 표준 텍스트는 복제하지 않습니다.