콘텐츠로 이동

PDF 2.0: 무엇이 바뀌었나

Evidence: Standard-backed

PDF 2.0은 ISO 32000-2입니다. 이는 Adobe가 아니라 ISO가 전적으로 소유한 최초의 PDF 명세입니다. 완전히 새로 만든 포맷이라기보다는 대부분 1.7을 통합하고 정리한 결과에 가깝습니다. 이 페이지에서는 실제로 무엇이 바뀌었는지, 그중 어떤 변경을 실무에서 체감하게 되는지, 그리고 NextPDF가 기본적으로 2.0 기준선을 목표로 삼으면서도 프로파일이 요구할 때는 여전히 이전 파일 구조를 작성할 수 있는 방식을 다룹니다.

“PDF 2.0”이라고 하면 마치 다른 포맷이어야 할 것처럼 들립니다. 하지만 실제로는 그렇지 않습니다. 2.0 파일은 1.7과 동일한 객체 모델, xref, 트레일러를 사용하므로 실제 변경 사항을 과소평가하기 쉽습니다. 문제를 일으키는 변경은 눈에 띄는 대표 기능이 아니라, 바로 강화된 규칙입니다. 1.7에서는 선택 사항이었으나 이제는 기대되는 규칙, 그리고 조용히 제거된 기능입니다. 완벽하게 유효한 1.7 파일이던 문서가 눈에 보이는 차이 하나 없이 비준수 2.0 파일이 될 수 있습니다.

이것이 중요한 또 다른 이유는 방향성입니다. NextPDF는 PDF 2.0 엔진입니다. 2.0이 무엇을 기대하는지, 그리고 어디에서 의도적으로 1.7과 다른지 알면, 엔진이 어떤 것을 거부하고 폰트를 더 엄격하게 임베드하며 테이블 대신 상호 참조 스트림을 기본값으로 삼는 이유를 이해할 수 있습니다.

  • PDF 2.0 = ISO 32000-2, ISO 소유이며 1.7을 대체하기보다 그 위에 구축됩니다.
  • 헤더는 %PDF-2.0이 되며, 준수 작성기는 버전을 헤더 또는 카탈로그 /Version에서 2.0으로 명시합니다.
  • 파일 구조의 대부분은 변경되지 않았습니다 — 동일한 간접 객체, 동일한 트레일러, 동일한 startxref/%%EOF 규율입니다.
  • 상호 참조 스트림은 자연스러운 2.0 기본값입니다. 고전적인 20 바이트 테이블도 여전히 적법하며, 일부 PDF/A 프로파일에서는 지금도 요구됩니다.
  • 2.0은 기능을 추가하고(예: 더 풍부한 연관 파일 및 문서 부분 구조, AES-256-GCM 확장을 통한 더 강력한 암호화) 기능을 제거합니다(일부 구조 태그, 강화된 폰트 임베딩 기대치, 폐지된 CJK 문자 컬렉션).
  • NextPDF는 기본적으로 2.0을 목표로 하며, 준수 프로파일이 요구할 때는 1.7/1.4 구조도 직렬화할 수 있습니다.

버전은 한 곳, 즉 직렬화 전략에서 표현되는 결정입니다.

Pdf20StreamStrategy(src/Writer/Pdf20StreamStrategy.php)는 %PDF-2.0 헤더를 작성하고, 카탈로그 버전에는 /2.0을 기록하며, 압축된 상호 참조 스트림을 내보냅니다. 또한 2.0의 폰트 강화 규칙도 직접 적용합니다. 2.0 프로파일에서는 이제 표준이 그러한 폰트의 임베드를 기대하므로, 임베드되지 않은 표준 Type 1 폰트에 대해 단순히 경고하는 데 그치지 않고 강제할 수 있습니다. 두 가지 테이블 전략(Pdf17TableStrategy, Pdf14TableStrategy)이 존재하는 것은 일부 프로파일이 더 오래된 형태를 필요로 하기 때문입니다. PDF/A-2/-3은 전통적인 상호 참조 테이블을 의무화하며, PDF/A-1은 추가로 객체 스트림과 상호 참조 스트림을 금지합니다. 세 가지 전략 모두 하나의 PdfSerializationStrategy 인터페이스를 구현하므로, 작성기 자체는 이 경계 위에서 동일하게 유지됩니다. 바뀌는 것은 trailer/xref 형태뿐입니다.

더 강력한 암호화도 같은 원칙에 따라 의도적으로 연결됩니다. PdfXrefWriter(src/Writer/PdfXrefWriter.php)는 AES-256-GCM 옵트인(2.0에 대한 ISO/TS 32003 확장)을 암호화 사전으로 전파하여, 내보내진 핸들러 버전과 암호 모드 항목이 실제로 생성된 바이트와 일치하도록 합니다. 엔진은 한 가지 암호를 선언해 놓고 다른 것을 작성하지 않습니다.

전체 설계는 다음과 같습니다. 2.0이 기본값입니다. 더 오래된 구조는 의도적으로 선택할 수 있으며, 결코 우연히 선택되지 않습니다. 그리고 2.0이 규칙을 강화하는 지점에서, NextPDF는 조용히 완화하기보다 강화된 기준선을 지킬 수 있습니다.

  1. Step 1 of 3: ISO 32000-1 PDF 1.7 — the Adobe-authored base, adopted by ISO
  2. Step 2 of 3: ISO 32000-2 PDF 2.0 — ISO-owned consolidation, tightening, and additions
  3. Step 3 of 3: ISO/TS 32003 AES-256-GCM (AESV4) — an encryption extension to PDF 2.0
NextPDF 가 추론하는 PDF 버전 계보: PDF 1.7 이 ISO 기반이 되었고, ISO 32000-2 가 PDF 2.0 이며, ISO/TS 32003 은 AES-256-GCM 암호화로 2.0 을 확장합니다.

버전 명시는 규범적입니다. Spec: ISO 32000-2, §7.5.2 은 준수 파일을 작성하는 프로세서가 버전을 — 헤더에서든 카탈로그 /Version 항목에서든 — 2.0으로 식별해야 하며(shall), 헤더는 단일 줄 끝 표시가 뒤따르는 %PDF-1.n 또는 %PDF-2.n임을 명시합니다. Spec: ISO 32000-2, §7.7.2 은 다음을 덧붙입니다: 카탈로그 /Version이 이전 헤더 버전을 재정의하며, 이것이 바로 증분 버전 상향을 가능하게 하는 요소입니다. Evidence: Standard-backed

2.0이 재작성이 아니라 통합이라는 점은 2.0이 유지하는 것에서 드러납니다. 상호 참조 스트림(/Type /XRef)은 PDF 1.5에서 도입되어 2.0 기본값으로 이어진 동일한 메커니즘입니다( Spec: ISO 32000-2, §7.5.8 ). 간접 객체, 트레일러, startxref 구조는 이전 페이지에서 설명한 것과 달라지지 않았습니다.

중요한 변경은 제거와 강화입니다. 표준은 PDF 1.7 표준 구조 네임스페이스에 존재하던 여섯 개의 표준 구조 요소가 PDF 2.0 네임스페이스의 일부가 아님을 기록합니다 — Art, BlockQuote, TOC, Reference, BibEntry, 그리고 Code입니다( Spec: ISO 32000-2, Annex L.3 , 네임스페이스 차이는 Spec: ISO 32000-2, §14.8.6 에 따라 정의됩니다). 또한 14개의 표준 Type 1 폰트를 강화합니다. 1.0~1.7에서는 그 사전이 메트릭 항목을 생략하는 것을 허용했으나, 2.0은 그 허용을 없앱니다( Spec: ISO 32000-2, §9.6.2.1 ). 그리고 미리 정의된 CJK 문자 컬렉션을 개정합니다. 예를 들어, Adobe-Korea1은 2.0에서 폐지되었고, Adobe-KR이 추가되었습니다. 이 가운데 어느 것도 기존 페이지의 모습을 바꾸지 않습니다. 하지만 이 모두가 해당 파일이 준수하는지 여부를 바꿀 수 있습니다.

범주예시(2.0 대 1.7)모습이 바뀌는가?왜 중요한가
변경되지 않음간접 객체, 트레일러, startxref/%%EOF, xref 스트림2.0은 동일한 객체 모델을 사용하므로 대부분의 도구가 그대로 이어집니다
추가됨더 풍부한 연관 파일 / 문서 부분 구조, AES-256-GCM 암호화(ISO/TS 32003)아니요옵트인하는 새로운 기능입니다. 더 오래된 리더는 안전하게 무시할 수 있습니다
강화됨표준 14종 폰트의 임베드가 기대됨. 메트릭은 더 이상 생략할 수 없음아니요유효한 1.7 파일이 비준수 2.0 파일이 될 수 있음
제거됨여섯 개의 1.7 네임스페이스 구조 요소(Art, BlockQuote, TOC, Reference, BibEntry, Code), 폐지된 CJK 컬렉션(예: Adobe-Korea1)아니요조용합니다: 준수 상실을 알리는 가시적 신호가 없음

중요한 PDF 2.0 변경은 대부분 눈에 보이지 않습니다. 옵트인하는 추가 기능, 그리고 겉모습은 바꾸지 않으면서 준수 여부를 바꾸는 tightenings/removals입니다 — 렌더링되는 단 하나의 픽셀도 바꾸지 않습니다.

2.0 파일과 1.7 파일 사이의 유일한 가시적 차이는 흔히 두 줄 — 헤더와 카탈로그 버전 —이지만, 그 이면의 준수 규칙은 상당히 다릅니다.

%PDF-2.0 % was %PDF-1.7
...
1 0 obj
<< /Type /Catalog /Version /2.0 % catalog states 2.0; overrides header if later
/Pages 2 0 R >>
endobj
...
% Cross-reference STREAM is the 2.0 default (was often a 20-byte table)
99 0 obj
<< /Type /XRef /Size 100 /W [1 2 2] /Filter /FlateDecode /Root 1 0 R >>
stream
<binary xref entries>
endstream
endobj
startxref
12345
%%EOF

리더는 %PDF-2.0/Version /2.0을 봅니다. 리더가 보지 못하는 것 — 그리고 준수 검사기가 보는 것 —은 이 파일에 이제 표준 폰트 임베드가 기대되며 2.0이 제거한 구조 태그를 사용해서는 안 된다는 점입니다. 바뀐 바이트는 거의 없습니다. 하지만 바뀐 규칙은 적지 않습니다.

함정은 “우리는 PDF 2.0을 출력하므로 이전보다 더 준수한다”라고 생각하는 것입니다. %PDF-2.0을 작성하는 것은 주장이지 보장이 아닙니다. 파일은 2.0 헤더를 지니면서도 — 임베드되지 않은 표준 폰트를 참조하거나 2.0이 제거한 기능을 사용함으로써 — 1.7에서 용인되던 것과 정확히 같은 방식으로 여전히 2.0을 위반할 수 있습니다. 버전 표시는 파일이 측정되는 기준을 높입니다. 하지만 파일을 그 기준 위로 들어 올리지는 않습니다. 반대 방향의 실수는 헤더만 바꾸면 1.7 파일이 2.0으로 작동한다고 가정하는 것입니다. 대개 동일하게 렌더링되면서도 준수에 실패하는데, 강화된 규칙은 눈에 보이지 않더라도 실제로 존재하기 때문입니다.

2.0 기준선을 목표로 한다는 것은 NextPDF가 기본적으로 2.0 파일 구조를 사용하며 2.0의 강화된 규칙을 지킬 수 있다는 뜻입니다. 이는 모든 선택적 2.0 기능이 구현되었다는 뜻은 아니며, 2.0 헤더를 내보내는 것이 문서를 PDF/A, PDF/UA 또는 그 밖의 어떤 프로파일에 대해 인증한다는 뜻도 아닙니다. 그것들은 기본 명세 위에 층을 이루는 별개의 더 엄격한 준수 목표이며, 각각 고유한 검증을 갖습니다.

이 페이지는 버전 차이에 대한 실용적인 길잡이이지, ISO 32000-2 대 32000-1의 완전한 변경 로그가 아닙니다. 특정 2.0 기능이나 폐지가 엔진 동작을 좌우하는 경우, 해당 동작은 별도 절에서 명확히 다룹니다. 이 페이지는 모든 절 수준의 차이를 열거하기보다 전체 지형을 제시합니다.

PDF 2.0은 1.7 리더와 하위 호환되는가? 변경되지 않은 구조에 대해서는 대체로 그렇습니다. 새로운 2.0 기능은 일반적으로 더 오래된 리더가 이해하지 못하는 항목을 무시할 수 있도록 설계됩니다. 하지만 2.0 전용 기능은 1.7 리더에서 반영되지 않습니다.

헤더와 카탈로그 /Version 중 무엇이 우선하는가? 카탈로그 /Version이 헤더보다 더 최신 버전을 명시할 때 우선합니다. 이것이 증분 업데이트가 헤더를 다시 쓰지 않고도 파일의 버전을 올릴 수 있게 하는 요소입니다.

NextPDF는 왜 테이블이 아니라 상호 참조 스트림을 기본값으로 하는가? 상호 참조 스트림은 자연스러운 PDF 2.0 메커니즘으로, 작고 압축된 객체를 색인할 수 있습니다. 20 바이트 테이블은 프로파일(특히 일부 PDF/A 레벨)이 요구할 때 여전히 작성됩니다.

  • PDF가 실제로 무엇인가 — PDF 2.0이 1.7에서 유지하는 객체 모델과 xref.
  • 표준의 지형 — ISO 32000-2가 NextPDF가 추적하는 표준 가운데 어디에 위치하는지, 그리고 한 절이 어떻게 동작으로 이어지는지.
  • 폰트: 어려운 부분 — 폰트 임베딩 강화는 실제로 체감하게 되는 2.0 변경 중 하나입니다.
  • PDF 2.0 — ISO 32000-2로 표준화된 PDF 명세이며, Adobe가 아니라 ISO가 소유한 최초의 판본입니다.
  • ISO 32000-1 — Adobe PDF 1.7의 ISO 표준화이며, PDF 2.0이 그 위에 구축되는 기반입니다.
  • ISO/TS 32003 — AES-256-GCM(AESV4) 암호화로 PDF 2.0을 확장하는 기술 명세입니다.
  • 카탈로그 /Version — PDF 버전을 명시하는 문서 카탈로그 항목으로, 더 최신 버전을 명시할 때 헤더보다 우선합니다.
  • 상호 참조 스트림 — PDF 1.5+ / 2.0 상호 참조 메커니즘(/Type /XRef)이며, NextPDF의 기본값입니다. 더 오래된 프로파일을 위한 고전적 테이블도 여전히 사용할 수 있습니다.
  • 강화(Tightening) — 1.7에서는 선택적이거나 허용되던 규칙이 2.0에서 기대되거나 요구되는 것으로, 겉모습은 바꾸지 않으면서 준수 여부를 바꿉니다.