PDF/UA-2 구조 작성, 검증 및 복구
HotPDF는 명시적 네임스페이스 정체성과 바운딩된 처리 비용을 유지하면서 혼합 PDF 1.7 및 PDF 2.0 구조 의미를 구축, 검증 및 원자적으로 복구할 수 있습니다
네임스페이스 인식 작성
AddStructureElement는 PDF/UA-2 역할이 요구할 때 필수 최상위 Document 요소를 포함하여 PDF 2.0 표준 구조 네임스페이스를 할당합니다
AddStructureElementNS는 명시적으로 네임스페이스 지정된 요소를 만들고, AddStructRoleMapNS는 네임스페이스 경계를 넘어 전이적으로 해결될 수 있는 이름 또는 두 항목 배열 매핑을 추가합니다
네임스페이스 사전은 간접적이며 URI별로 한 번 등록되고 StructTreeRoot/Namespaces를 통해 전달됩니다
속성 및 의미 도우미
| API | 용도 |
|---|---|
SetStructureAttributeName | 소유자별 사전에 이름 값 속성을 추가하거나 교체하고 사용자 정의 소유자를 네임스페이스에 바인딩할 수 있습니다 |
SetStructureAttributeNumber | RowSpan 또는 ColSpan 같은 정수 값 구조 속성을 추가하거나 교체합니다 |
SetStructureTableCellHeaders | 고유한 ID 값으로 표 머리글 셀을 식별하는 비어 있지 않은 Headers 배열을 씁니다 |
SetStructurePronunciation | PDF 2.0 구조 요소에 상속된 PhoneticAlphabet 이름과 정확한 Phoneme 교체를 씁니다 |
AddPronunciationLexicon | 간접 application/pls+xml 파일을 내장하고 해당 Filespec을 조회 순서로 StructTreeRoot/PronunciationLexicon에 추가합니다 |
AssociateFileWithStructure | 간접 Filespec을 AF를 통해 구조 요소와 연결합니다 |
AddAccessibleFormula | Alt, ActualText 또는 둘 다 있는 Formula를 만듭니다 |
AddAccessibleMathMLFormula | 공식을 만들고, 설명된 application/mathml+xml 파일을 내장하고, 구조와 연결하며, MathML 네임스페이스 하위 요소를 추가합니다 |
바운딩된 단일 패스 검증
ValidatePDFUA2Structure는 유지된 모든 진단을 THPDFUA2ValidationIssues 배열로 반환하고, 하나 이상의 진단이 uisError 심각도를 가질 때 False를 반환합니다
검증기는 순환 감지로 네임스페이스 인식 역할 맵을 해결하고, 최상위 문서, 부모-자식 계층, 부모 백링크, 속성 소유자와 개정, 주석 StructParent, 부모 트리 및 OBJR 소유권, 연결 파일, 제목, 목록, 표, Ruby, Warichu, 발음 힌트, 공식 및 MathML을 확인합니다
표 검증은 MaxObjects 안에서만 양수 행 및 열 범위를 확장하고, 교차 셀과 불규칙한 행 또는 행 그룹 지오메트리를 거부하며, 소유 표 안에서 Headers를 해결하고, 중복, 자기 및 순환 헤더 참조를 감지하며, Scope 또는 첫 행 및 첫 열 배치가 결정할 때만 암시적 연결을 수락합니다
목록 검증은 완전한 PDF 2.0 ListNumbering 집합을 인식하고, 레이블 의미를 적용하며, ContinuedList 및 정렬된 동일 수준 ContinuedFrom 참조를 확인하고, Lbl 및 LBody 밖의 연속 순환 또는 직접 실제 콘텐츠를 거부합니다
Ruby 하위 요소는 RB,RT 또는 RB,RP,RT,RP여야 하고, Warichu 하위 요소는 WP,WT,WP여야 하며, 발음 항목은 PDF 객체 유형을 유지하고, 모든 발음 사전은 간접 내장 PLS Filespec이어야 합니다
간접 객체 스캔, 순회 깊이, 역할 맵 깊이, 확장된 표 셀, 유지된 이슈 개수 및 적대적 컬렉션 처리는 바운딩되므로 검증이 신뢰할 수 없는 구조 트리에 대해 예측 가능합니다
공유 규정 준수 결과
THPDFComplianceFindings 검증 오버로드는 공유 프로필, 심각도, 안정적인 규칙 ID, 표준 조항, 논리 경로, 간접 객체 번호 및 0부터 시작하는 페이지 인덱스와 함께 동일한 진단을 반환합니다
상세 복구 오버로드는 바운딩된 복구 전 및 복구 후 결과를 비교하여 적용, 해결되지 않음, 롤백 또는 실패한 복구 작업을 식별하고, 계산된 복구 계열 요약을 추가합니다
ComplianceFindingsToJSON은 버전 지정 hotpdf.compliance.findings.v1 스키마 아래에서 결정적 순서를 유지하고 알 수 없는 객체 또는 페이지 위치를 null로 나타냅니다
원자적 구조 복구
RepairPDFUA2Structure는 copy-on-write 그래프 트랜잭션 안에서 실행되고, 중복 또는 등록되지 않은 네임스페이스 사전을 정규화하며, 구조 및 역할 맵 네임스페이스 참조를 재작성하고, 표준 구조 네임스페이스를 복구하며, 구조 속성 네임스페이스와 개정을 정규화하고, 결정적 목록, 표, Ruby, Warichu, 발음, 대체 텍스트, 언어 상속, 제목 순서 및 Artifact 태그 결함을 복구합니다
변형 후 동일한 검증기가 후보 그래프를 확인하고, 기본 정책은 임의의 PDF/UA-2 오류가 남아 있을 때 모든 변경을 롤백합니다
- 중복 네임스페이스 URI는 네임스페이스 인식 역할 매핑이 일치할 때만 하나의 간접 사전으로 축소됩니다
- 유효한 참조 네임스페이스는 구조 트리를 반복 스캔하지 않고 등록할 수 있습니다
- 표준 속성 소유자는 잘못된 네임스페이스 항목을 버리고, 사용자 정의 소유자는 네임스페이스를 추론할 수 없을 때 명시적
CustomAttributeNamespaceURI가 필요합니다 - 음수 또는 분수 요소 개정은 0이 되고, 잘못된 속성 배열 개정은 0이 되며, 고아 개정 항목은 제거됩니다
- 인식 가능한 목록 번호 매기기가 복원되고, 레이블이 있는 목록은
None이 아닌 번호 매기기 의미를 받으며, 유효한 연속 참조는ContinuedList=true를 받고, 잘못 배치된 캡션 하나는 첫 위치로 이동합니다 - 잘못된 표 범위는 1이 되고, 데이터 셀에서
Scope가 제거되며, 잘못된, 표 간, 자기 또는 중복Headers항목은 대체 연결을 만들지 않고 제거됩니다 - Ruby 및 Warichu 하위 요소는 정확히 필요한 multiset이 이미 존재할 때만 재정렬됩니다
- 잘못 입력된 발음 힌트는 제거되고, 잘못된 사전 참조는 정리되며, 유효한 내장 사전 스트림은 PLS MIME 하위 유형을 받습니다
- 누락된
Alt값은 호출자 제공 폴백 전에 기존 제목, 확장 텍스트 또는 동일 MCID 추출 텍스트를 사용하며, 빈 기본값은 설명을 만들지 않습니다 - 유효한 루트 또는 호출자 제공 BCP-47 언어가 Catalog 언어가 될 수 있으므로 중복 또는 잘못된 하위 항목이 안전하게 상속됩니다
- 첫 제목 및 건너뜀 수준 결함은 문서 순서로 해결되며,
DocumentFragment안의 선택적 독립 제목 시작이 있습니다 Artifact구조 역할은 생산자 페이지 콘텐츠와 로드된 콘텐츠 스트림의 표시된 콘텐츠 태그와 정렬됩니다- 모호한 표 지오메트리, 누락된 의미 하위 요소, 충돌하는 식별자 및 해결되지 않은 읽기 의미는 오류로 남아 기본 롤백을 트리거합니다
MaxObjects및MaxRepairs는 신뢰할 수 없는 그래프가 무제한 작업을 강제하기 전에 안전하게 실패합니다
검증 정책
THPDFUA2ValidationOptions.Default로 시작하고 워크플로별 결정만 변경합니다
THPDFUA2HeadingPolicy는 제목 처리를 선택하고, THPDFUA2IssueSeverity는 경고를 오류와 구분하며, 각 THPDFUA2ValidationIssue는 안정적인 코드, 구조 경로, 심각도 및 메시지를 지닙니다
HeadingPolicy는 건너뜀 수준을 무시하거나, 경고로 유지하거나, 순차 수준을 요구할 수 있습니다AllowDocumentFragmentHeadingStarts는DocumentFragment안에서 제목 컨텍스트를 재설정합니다RequireListLabels는 번호 목록 항목에 하나의Lbl을 요구합니다RequireExplicitTableHeaderAssociations는 머리글 범위 추론에만 의존하는 데이터 셀을 보고합니다CheckListSemantics는 완전한 PDF 2.0 번호, 연속, 캡션, 레이블, 본문 및 콘텐츠 배치 검사를 활성화합니다CheckTableSemantics는 바운딩된 그리드, 범위, 행 그룹, 머리글 범위 및 표 로컬 연결 검사를 활성화합니다CheckRubyWarichuSequences는 동아시아 인라인 구조에 대한 정확한 직접 하위 순서 검사를 활성화합니다CheckPronunciationHints는 구조 힌트 및 내장 PLS 사전 검사를 활성화합니다RequireStructureAssociatedFiles는 모든 카탈로그 연결 파일이 구조 요소에서 도달 가능해야 합니다RequireFormulaTextAlternative는 연결된 MathML이 없으면 공식 텍스트 대안을 요구합니다MaxObjects는 순회 시작 전에 간접 객체 스캔을 바인딩합니다MaxIssues는 최종 성공 또는 실패 결과를 숨기지 않고 유지된 진단을 바인딩합니다
권장 워크플로
BeginDoc전에PDFUACompliance를 활성화하고PDFUAPart = 2를 선택하며Lang을 설정합니다- 최상위
Document하나를 만들고 표준 또는 명시적으로 네임스페이스 지정된 역할로 의미 하위 요소를 만듭니다 - 구조 도우미로 주석과 연결 파일을 등록하고,
SetStructurePronunciation으로 발음 힌트를 쓰며, 원하는 조회 순서로AddPronunciationLexicon을 통해 PLS 파일을 추가합니다 - 애플리케이션이 모든 진단을 한 번에 필요로 할 때
EndDoc전에ValidatePDFUA2Structure를 실행하고, 결정적 네임스페이스, 구조 및 접근성 복구를 위해RepairPDFUA2Structure를 호출하며, CI가 표준 JSON을 요구할 때 공유 결과 오버로드를 선택합니다 EndDoc도 PDF/UA-2 문서에 대한 엄격한 기본 정책을 적용하므로 출력 전에 모든 오류를 해결합니다
추가 정보: 자동 레이아웃 구조, ValidatePDFUA2Structure, RepairPDFUA2Structure, ComplianceFindingsToJSON, SetStructurePronunciation, AddPronunciationLexicon, AddStructureElement, BeginTaggedContentForStructure, AppendStructureMarkedContent