콘텐츠로 이동

문제 해결: PDF/A 및 PDF/UA 검증 실패

이 항목에서는 엔진이 문서를 PDF/A 또는 PDF/UA 프로파일에 맞게 유지하는 과정에서 발생시키는 실패를 다룹니다. 아래 조항 번호는 엔진이 자체 소스 및 예외 메시지에서 인용하는 번호입니다. 이 페이지는 해당 내용을 풀어서 설명합니다. 엔진은 감지한 프로파일 실패를 보고하지만, 문서의 적합성을 인증하지는 않습니다. 권위 있는 적합성 판정은 자체 규칙 세트를 실행하는 외부 검증기가 제공합니다.

항목: PDF/A에서 암호화가 거부됨

섹션 제목: “항목: PDF/A에서 암호화가 거부됨”
  • 증상. NextPDF\Security\Exception\IncompatiblePdfAModeException이 발생하며, PDF/A 모드에서 암호화 작업이 금지된다는 메시지가 표시됩니다.
  • 유력한 원인. 파이프라인이 PDF/A 모드를 활성화하는 동시에 암호화를 요청했습니다. 엔진은 ISO 19005-{1,2,3,4} §6.1.3을 인용합니다. 즉, Encrypt 키는 PDF/A 파일의 트레일러에 존재해서는 안 됩니다. 엔진은 호출 순서와 관계없이 이를 절대적인 거부 조건으로 처리합니다.
  • 증거 / 진단. getContext()pdfa_modeencryption_operation을 반환합니다. 실패 경로 테스트 tests/SecurityScenarios/PdfAEncryptionRefusalTest.php은 PDF/A가 암호화 호출 전후 어느 시점에 활성화되더라도 거부가 발생함을 검증합니다.
  • 해결.
    1. 문서에 필요한 속성이 보관용 적합성인지 암호화인지 결정합니다.
    2. 보관용 문서의 경우 암호화 호출을 제거합니다.
    3. 암호화된 문서의 경우 PDF/A 활성화 호출을 제거합니다.
    4. 파이프라인을 다시 실행합니다.
  • 관련 항목. 암호화 및 권한.

항목: PDF/A-1에서 이미지 필터가 금지됨

섹션 제목: “항목: PDF/A-1에서 이미지 필터가 금지됨”
  • 증상. 이미지 수집 중 Pdf14FeatureRejectedException이 발생하며, /JPXDecode 또는 /JBIG2Decode 및 조항 ISO 19005-1:2005 §6.1.13을 명시하는 메시지가 표시됩니다.
  • 유력한 원인. PDF/A-1 빌드가 PDF 1.4 이후에 도입된 필터를 사용하는 이미지를 수집했습니다. PDF/A-1은 PDF 1.4 기능 세트를 대상으로 하므로 PdfA1FeatureGuard는 JPEG 2000(/JPXDecode) 및 JBIG2(/JBIG2Decode)를 거부합니다.
  • 증거 / 진단. src/Writer/PdfA1FeatureGuard.php은 금지된 필터 목록을 보유하고, 인용된 조항과 함께 예외를 발생시킵니다. 이 가드는 PDF/A-1 프로파일에서만 거부합니다. PDF/A-2, PDF/A-3 및 PDF 2.0 프로파일은 해당 필터를 허용합니다.
  • 해결.
    1. JPEG 2000 또는 JBIG2를 사용하지 않고 소스 이미지를 다시 인코딩합니다. 예를 들어 베이스라인 JPEG 또는 Flate로 압축된 이미지로 다시 저장합니다.
    2. 또는 해당 필터를 허용하는 PDF/A-2 또는 PDF/A-3을 대상으로 합니다.
    3. 빌드를 다시 실행합니다.
  • 관련 항목. 적합성 참조.

항목: PDF/A에서 글꼴이 임베드되지 않음

섹션 제목: “항목: PDF/A에서 글꼴이 임베드되지 않음”
  • 증상. PDF/A 빌드가 글꼴 검증 단계에서 실패합니다. 외부 검증기가 임베드되지 않은 글꼴을 보고합니다.
  • 유력한 원인. 프로그램이 임베드되지 않은 글꼴로 글리프를 그렸습니다. PDF/A 관리자 계약은 모든 글꼴이 임베드되어야 한다고 명시합니다. 표준 14 글꼴도 임베드 없이는 하나도 허용되지 않습니다.
  • 증거 / 진단. src/Contracts/PdfAManagerInterface.phpvalidateFont(string $fontName, bool $isEmbedded, array $cmapForward)을 다음의 문서화된 규칙과 함께 선언합니다. “모든 글꼴은 임베드되어야 하며, 임베드 없이는 어떤 표준 14 글꼴도 허용되지 않습니다.” 구체적인 구현은 nextpdf/pro에서 제공됩니다.
  • 해결.
    1. 임베드되지 않은 것으로 보고된 글꼴을 식별합니다.
    2. 내장된 표준 14 글꼴에 의존하지 말고, 임베드 가능한 글꼴 프로그램 파일로 해당 글꼴을 구성합니다.
    3. Base 14 대체와의 상호작용은 글꼴 및 태그 지정 항목을 참조하십시오.
    4. 빌드를 다시 실행하고 다시 검증합니다.
  • 관련 항목. 글꼴 및 태그 지정.

항목: JavaScript가 존재하여 PDF/A 검증이 실패함

섹션 제목: “항목: JavaScript가 존재하여 PDF/A 검증이 실패함”
  • 증상. PDF/A 빌드가 JavaScript 검증 단계에서 실패하거나, 외부 검증기가 JavaScript 액션을 보고합니다.
  • 유력한 원인. 문서 또는 양식 필드에 JavaScript 액션이 포함되어 있습니다. PDF/A 관리자 계약은 JavaScript 액션을 금지하는 ISO 19005-4:2020 §6.7.1을 인용합니다.
  • 증거 / 진단. PdfAManagerInterface::validateNoJavaScript()validateNoJavaScriptActions()은 모두 docblock에서 §6.7.1을 인용합니다.
  • 해결.
    1. 문서 또는 양식 필드에서 JavaScript 액션을 제거합니다.
    2. 해당 액션이 동작에 필요하다면 문서는 PDF/A가 될 수 없습니다. 해당 용도에는 PDF/A가 아닌 변형본을 생성합니다.
    3. 빌드를 다시 실행하고 다시 검증합니다.
  • 관련 항목. 적합성 참조.

항목: 태그된 출력이 PDF/UA-2로 선언되지 않음

섹션 제목: “항목: 태그된 출력이 PDF/UA-2로 선언되지 않음”
  • 증상. 태그 지정이 활성화된 상태로 빌드된 문서가 PDF/UA-2로 인식되지 않거나 PDF/UA-2 선언이 없습니다.
  • 유력한 원인. 구조 트리가 비어 있습니다. 빈 구조 트리는 프로파일을 충족하지 못하므로, 엔진은 태그된 구조가 없는 문서를 PDF/UA-2로 선언하지 않습니다.
  • 증거 / 진단. 실패 경로 테스트 tests/Integration/Accessibility/EmptyTaggedPdfDoesNotAdvertisePdfUa2Test.php은 빈 태그 문서가 PDF/UA-2로 선언되지 않음을 검증합니다. 이는 결함이 아니라 엔진의 문서화된 동작입니다.
  • 해결.
    1. 구조 트리가 비어 있지 않게 채워지도록 콘텐츠가 태그 지정 경로를 통해 방출되는지 확인합니다.
    2. 마크된 콘텐츠 시퀀스가 구조 요소에 매핑되는지 확인합니다.
    3. 빌드를 다시 실행하고 PDF/UA-2 상태를 다시 확인합니다.
  • 관련 항목. 글꼴 및 태그 지정.

항목: 언어가 누락되거나 유효하지 않아 PDF/UA-2가 실패함

섹션 제목: “항목: 언어가 누락되거나 유효하지 않아 PDF/UA-2가 실패함”
  • 증상. 언어 항목이 없거나 유효한 태그가 아니어서 PDF/UA-2 검사가 실패합니다.
  • 유력한 원인. 문서 또는 구조 요소에 유효한 언어가 없습니다. PDF/UA-2는 자연어 선언을 요구합니다. 누락되었거나 형식이 잘못된 Lang 값은 엄격한 검사를 통과하지 못합니다.
  • 증거 / 진단. 실패 경로 테스트 tests/Unit/Conformance/PdfUa2Section844LangStrictTest.php은 엄격한 언어 요구 사항을 검증합니다. 언어 태그는 src/Accessibility/Bcp47Validator.php을 통해 검증됩니다. 유효하지 않은 태그는 src/Accessibility/InvalidBcp47TagException.php을 발생시킵니다.
  • 해결.
    1. 문서 수준 언어를 유효한 BCP-47 태그로 설정합니다. 예를 들어 en-US 또는 zh-Hant-TW입니다.
    2. 특정 구절이 다른 언어로 되어 있으면 해당 구조 요소에 언어를 설정합니다.
    3. 빌드를 다시 실행하고 다시 검증합니다.
  • 관련 항목. 글꼴 및 태그 지정.
  • 여기서 설명하는 PDF/A 및 PDF/UA 거부는 엔진 내부에서 발생합니다. 이 거부는 외부 검증기의 판정과 독립적이며, 그 판정을 대체하지 않습니다. 권위 있는 결과를 얻으려면 veraPDF와 같은 검증기를 실행하십시오.
  • 구체적인 PDF/A 필수 객체 작성기(XMP 메타데이터 스트림, ICC 프로파일이 포함된 출력 인텐트)는 런타임에 nextpdf/pro에서 해결됩니다. 코어 패키지만 설치된 경우 해당 객체는 방출되지 않습니다. 코어 전용 빌드는 완전한 PDF/A 생성기가 아닙니다.
  • 암호화 거부는 절대적이며 순서와 무관합니다. 암호화 호출 후에 PDF/A를 활성화하더라도 여전히 거부가 발생합니다.

용어집: 출력 인텐트 · 구조 트리