콘텐츠로 이동
getnextpdf.com

PDF 2.0 적합성

경계 선언. 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 완전 적합”이라는 포괄적인 주장은 하지 않습니다. 적합한 파일이란 적합한 리더가 표준에 따라 처리할 수 있는 파일을 뜻합니다. 이는 검증기의 판정이지, 라이브러리가 설정하는 플래그가 아닙니다.

Terminal window
composer require nextpdf/core:^3

PDF 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)를 제공합니다. 이는 검증을 돕는 도구이지 인증서가 아닙니다.

기호효과
ConformanceMode::Plain기본값 — 제약 없는 PDF 2.0 출력입니다.
ConformanceMode::requiresPdf17(): boolPDF 2.0 모드에서는 False이며, 라이터는 %PDF-2.0 헤더를 내보냅니다.
NextPDF\Compliance\Validator\ArlingtonValidatorArlington 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 권한 비트는 접근 제어가 아니라 리더 협조 방식입니다. 베이스라인은 어떠한 보안 보장도 제공하지 않습니다.

주장사양
적합한 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

각 행에는 표준 이름과 절을 표기합니다. 표준 본문은 그대로 복제하지 않으며, 각 절은 NextPDF의 표현으로 요약합니다.