PDF 2.0 베이스라인: ISO 32000-2에서 NextPDF가 구현하는 절
한눈에 보기
섹션 제목: “한눈에 보기”경계 선언. NextPDF 는 인용된 절을 구현하며, 전체 ISO 32000-2 적합성을 포괄적으로 단언하지 않습니다.
ISO 32000-2:2020은 PDF 2.0 기본 표준입니다. NextPDF Core의 기본 출력(ConformanceMode::Plain)은 제약이 없는 PDF 2.0입니다. 즉, %PDF-2.0 헤더, 문서 카탈로그, 상호 참조 구조, 적합한 트레일러로 구성됩니다. 이 페이지에서는 NextPDF가 구현하는 베이스라인 절과 명시적인 한계를 문서화합니다. 이 라이브러리는 인용된 절을 구현하지만, “ISO 32000-2 완전 적합”이라는 포괄적인 주장은 하지 않습니다. 적합한 파일이란 적합한 리더가 표준에 따라 처리할 수 있는 파일을 뜻합니다. 이는 검증기의 판정이지, 라이브러리가 설정하는 플래그가 아닙니다.
composer require nextpdf/core:^3PDF 2.0 베이스라인 출력은 Core의 기본값이므로 프로필 호출이 필요하지 않습니다. ConformanceMode::Plain은 기본 구분자이며, PDF/A-4, PDF/UA-2, PDF/X, ZUGFeRD 프로필은 이 베이스라인 위에 계층화된 제약 부분집합입니다.
개념 개요
섹션 제목: “개념 개요”모든 NextPDF 문서는 어떤 프로필이 적용되기 전부터 PDF 2.0 파일입니다. 라이터는 ISO 32000-2가 적합한 파일에 부과하는 구조적 의무를 충족합니다.
- 문서 카탈로그 — §7.7.2: 트레일러의
/Root가 참조하는 루트 객체이며, 모든 출력에 존재합니다. - 상호 참조 구조 — §7.5.8: 모든 객체의 위치를 확인할 수 있게 하는 상호 참조 테이블 또는 스트림입니다.
- 트레일러 — §7.5.5: 적합한 파일이 반드시 포함해야 하는 트레일러 딕셔너리로, 파일
/ID식별자도 담습니다./ID는 파일마다 고유하며, 비교를 위해 정규화 과정에서 제거됩니다. 이것이 대부분의 다중 객체 출력이 비트 단위가 아니라reproducibility_profile: structural인 이유입니다. - 논리 구조 — §14.7.2: 태그 모드가 활성화될 때 PDF/UA-2 프로필이 기반으로 삼는
StructTreeRoot베이스라인입니다. - 버전 확장 — §7.12: 개발자 확장이 선언될 때 사용하는 Extensions 딕셔너리 / 개발자 접두사 메커니즘입니다.
NextPDF는 이러한 절을 구현하지만, 전체 ISO 32000-2 적합성 평가는 수행하지 않습니다. 그 역할은 외부 검증기(예: Arlington 문법 검사기 또는 veraPDF)에 있습니다. NextPDF\Compliance는 구조적 불일치를 드러내는 바이트 스트림 교차 검사(ArlingtonValidator)를 제공합니다. 이는 검증을 돕는 도구이지 인증서가 아닙니다.
API 표면
섹션 제목: “API 표면”| 기호 | 효과 |
|---|---|
ConformanceMode::Plain | 기본값 — 제약 없는 PDF 2.0 출력입니다. |
ConformanceMode::requiresPdf17(): bool | PDF 2.0 모드에서는 False이며, 라이터는 %PDF-2.0 헤더를 내보냅니다. |
NextPDF\Compliance\Validator\ArlingtonValidator | Arlington PDF 모델에 대한 문법 교차 검사입니다(검증을 보조합니다). |
코드 샘플 — 빠른 시작
섹션 제목: “코드 샘플 — 빠른 시작”<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
$out = getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: __DIR__ . '/baseline.pdf';
$doc = Document::createStandalone(); // ConformanceMode::Plain — PDF 2.0$doc->setTitle('PDF 2.0 baseline');$doc->writeHtml('<h1>Hello PDF 2.0</h1><p>Unconstrained baseline output.</p>');$doc->save($out);
echo "Wrote {$out} (%PDF-2.0). Validate structure with an external checker.\n";코드 샘플 — 프로덕션
섹션 제목: “코드 샘플 — 프로덕션”베이스라인의 프로덕션 운영 방식은 대표 출력에 대해 CI에서 외부 구조 검증기(Arlington / veraPDF)를 실행하고, 그 보고서를 기준으로 게이트를 두는 것입니다. 라이브러리는 구조를 내보내며, 검사기는 그 구조가 적합한지 판정합니다. 라이브러리는 포괄적인 적합성 주장을 하지 않습니다.
엣지 케이스 및 주의 사항
섹션 제목: “엣지 케이스 및 주의 사항”/ID는 파일마다 고유합니다. 트레일러/ID,/CreationDate또는 글꼴 서브셋 접두사를 포함하는 베이스라인 출력은 바이트 단위로 안정적이지 않습니다. 원시 sha256가 아니라 구조 프로필(qpdf-normalize)로 비교하십시오.- Plain ≠ 아카이브.
ConformanceMode::Plain은 PDF/A가 아닙니다. OutputIntent나pdfaid마커를 담지 않습니다. 이를 아카이브용으로 취급하지 마십시오. - 구현 ≠ 완전 적합. 이 페이지는 NextPDF가 구현하는 절을 나열합니다. 이는 모든 문서에서 모든 ISO 32000-2 절이 충족된다는 진술이 아니며, 그런 판단은 문서별 검증기가 내립니다.
- 확장은 네임스페이스로 구분됩니다. 개발자 확장은 등록된 접두사와 함께 §7.12 Extensions 딕셔너리를 사용합니다. 접두사가 없는 사설 키는 베이스라인에서 벗어난 것입니다.
베이스라인 출력은 엔진의 핵심 경로입니다. 일반적인 문서의 경우 벽시계 시간 ≤ 1500 ms, 최대 메모리 ≤ 64 MB로 예산이 책정되어 있습니다. 베이스라인 라이터에는 백포트 매트릭스(PHP 8.1–8.4)가 지원됩니다.
보안 참고 사항
섹션 제목: “보안 참고 사항”PDF 2.0 베이스라인 출력은 명시적으로 추가하지 않는 한 암호화나 서명을 담지 않습니다. 암호화는 기밀성을 위한 기능입니다(별도의 레시피). ISO 권한 비트는 접근 제어가 아니라 리더 협조 방식입니다. 베이스라인은 어떠한 보안 보장도 제공하지 않습니다.
적합성
섹션 제목: “적합성”| 주장 | 사양 | 절 | reference_id |
|---|---|---|---|
| 적합한 PDF 2.0 파일은 반드시 적합한 트레일러 / 파일 구조를 포함해야 합니다. | ISO 32000-2 | §7.5.5 | |
| 모든 객체는 상호 참조 테이블 또는 스트림을 통해 위치를 찾을 수 있어야 합니다. | ISO 32000-2 | §7.5.8 | |
| 파일에는 루트 객체인 문서 카탈로그가 있습니다. | ISO 32000-2 | §7.7.2 | |
| 적합성은 적합한 라이터와 리더의 관점에서 규정됩니다. | ISO 32000-2 | §7.2 | |
| 버전 확장은 Extensions 딕셔너리 / 개발자 접두사를 사용합니다. | ISO 32000-2 | §7.12 | |
| 태그된 출력은 ISO 32000-2 논리 구조 베이스라인을 기반으로 합니다. | ISO 32000-2 | §14.7.2 |
인용은 검증 코퍼스를 가리키는 절 ID와 reference_id 포인터로 제공됩니다. 표준 본문은 그대로 복제하지 않으며, 각 절은 NextPDF의 표현으로 요약합니다.