THotPDF.RepairPDFUA2Structure Method
copy-on-write 그래프 트랜잭션 안에서 복구 가능한 PDF/UA-2 네임스페이스, 속성, 구조, 접근성 결함을 복구하고 커밋 전에 후보 그래프를 검증합니다
선언
function RepairPDFUA2Structure(
const Options: THPDFUA2RepairOptions;
out Report: THPDFUA2RepairReport;
out Issues: THPDFUA2ValidationIssues): boolean; overload;
function RepairPDFUA2Structure(
const Options: THPDFUA2RepairOptions;
out Report: THPDFUA2RepairReport;
out Issues: THPDFUA2ValidationIssues;
out Findings: THPDFComplianceFindings): boolean; overload;
유닛
HPDFDoc
복구 옵션
THPDFUA2RepairOptions.Default에서 시작해 입력 워크플로우에 필요한 정책 결정만 재정의합니다
| 필드 | 목적 |
|---|---|
NormalizeDuplicateNamespaces | URI마다 하나의 정규 indirect 사전으로 StructTreeRoot/Namespaces를 재구성하고 충돌하는 role map은 거부합니다 |
RegisterReferencedNamespaces | 구조 요소, 속성, namespace 인식 role map이 참조하는 유효한 네임스페이스 사전을 등록합니다 |
RepairStandardStructureNamespaces | 네임스페이스가 없거나 잘못된 표준 role에 PDF 2.0 네임스페이스를 할당하고 최상위 Document는 항상 정규화합니다 |
RepairAttributeNamespaces | 속성 네임스페이스 참조를 정규화하고 표준 owner에서 잘못된 네임스페이스 항목을 제거합니다 |
RepairAttributeRevisions | 음수 또는 소수 revision 번호를 정규화하고 속성 배열에서 고아 revision 항목을 제거합니다 |
RepairListSemantics | 번호 매기기, continuation 플래그, 잘못된 continuation 유형, 위치가 잘못된 caption 하나를 목록 콘텐츠를 새로 만들지 않고 정규화합니다 |
RepairTableSemantics | 잘못된 span과 scope를 정규화하고, 잘못된 테이블 로컬 헤더 참조를 제거하며, 위치가 잘못된 caption 하나를 옮깁니다 |
RepairRubyWarichuSequences | 정확히 요구되는 role multiset이 이미 존재할 때만 자식 순서를 재배열합니다 |
RepairPronunciationHints | 잘못된 유형의 힌트를 제거하고, 유효하지 않은 lexicon 참조를 정리하며, 내장 PLS MIME subtype을 정규화합니다 |
RepairMissingAlternateText | Figure, Formula, Form의 없는 Alt를 기존 제목, 확장 텍스트, 같은 MCID의 추출 텍스트, 명시적 fallback 순서로 복원합니다 |
RepairLanguageInheritance | 유효한 구조 루트 또는 명시적 기본 언어를 Catalog로 승격하고, 상속이 모호하지 않을 때 잘못되거나 중복인 구조 수준 언어 항목을 제거합니다 |
RepairHeadingOrder | 문서 순서를 유지하면서 첫 표제 결함과 건너뛴 수준 결함만 다시 번호를 매깁니다 |
RepairArtifactTagging | producer와 로드된 페이지 콘텐츠에 대해 Artifact 구조 요소와 연관된 marked-content 태그를 다시 씁니다 |
AllowDocumentFragmentHeadingStarts | 복구와 복구 후 검증 모두에서 DocumentFragment마다 표제 컨텍스트를 초기화합니다 |
RollbackOnValidationFailure | 복구 후에도 PDF/UA-2 오류가 하나라도 남으면 원래 그래프를 복원합니다 |
CustomAttributeNamespaceURI | 의미를 안전하게 추론할 수 없는 사용자 정의 속성 owner에 명시적 네임스페이스를 제공하며, 기본값인 빈 값은 fail-closed로 동작합니다 |
DefaultLanguage | Catalog와 구조 루트 모두 유효한 언어를 담고 있지 않을 때만 BCP-47 언어 태그를 제공합니다 |
FallbackAlternateText | 문서에서 유래한 모든 소스가 실패한 뒤 호출자가 검토한 대체 텍스트를 제공하며, 기본값인 빈 값은 절대 설명을 지어내지 않습니다 |
MaxGeneratedAlternateTextCharacters | 같은 MCID 텍스트 추출에 상한을 두며 기본값은 4,096 UTF-16 code unit입니다 |
MaxObjects | 객체 그래프 스캔에 상한을 두며 기본값은 1,000,000 객체입니다 |
MaxRepairs | 보존되는 변경에 상한을 두며 기본값은 100,000 복구 작업입니다 |
복구 보고서
THPDFUA2RepairReport는 그래프가 변경되었는지 롤백되었는지, 한도를 초과했는지, 복구 후 검증 상태, 조사한 객체 수, 남은 오류, 대체 텍스트·언어 항목·표제 수준·Artifact 태그를 포함한 각 복구 계열의 개수를 보고합니다
UnresolvedAlternateTextCount, UnresolvedLanguageCount, UnresolvedArtifactCount는 자동 변경과 구별되는, 아직 작성자 검토가 필요한 의미를 표시합니다
반환되는 THPDFUA2ValidationIssues 배열에는 검증이 실패한 경우 복구 후 진단이 담기고, resource bound 또는 충돌하는 중복 role map으로 트랜잭션이 중단된 경우 안정적인 복구 전용 진단이 담깁니다
상세 overload는 crsApplied, crsUnresolved, crsRolledBack, crsFailed로 표시된 복구 전 finding과 계열별 개수 요약도 함께 반환합니다
이 provenance overload는 제한된 복구 전 검증 패스를 한 번 더 수행합니다. 최종 보고서와 이슈만 필요하다면 기존 3-output overload를 사용하세요
원자성과 안전성
- 새로 할당된 indirect 네임스페이스 사전을 포함해 모든 변경은 문서 그래프 트랜잭션에 속합니다
- 중복 네임스페이스 사전은 role mapping이 서로 일치할 때만 병합됩니다
CustomAttributeNamespaceURI가 명시적으로 주어지지 않는 한 사용자 정의 속성 의미를 지어내지 않습니다FallbackAlternateText가 명시적으로 주어지지 않는 한 대체 텍스트를 지어내지 않습니다- producer 페이지 콘텐츠 편집은 검증이 성공할 때까지 stage에 두고, 로드된 stream 편집은 그래프 트랜잭션 안에 유지됩니다
- 모호한 테이블 교차, 없는 구조 자식, 충돌하는 ID, 미해결 continuation 대상, 없는 헤더 의미는 절대 추측하지 않습니다
- 기본 정책은 관련 없는 PDF/UA-2 오류가 남아 있으면 전체 복구를 롤백합니다
- 로드된 그래프와 producer 쪽 그래프는 동일한 제한된 검증·복구 경로를 사용합니다
예제
var
Options: THPDFUA2RepairOptions;
Report: THPDFUA2RepairReport;
Issues: THPDFUA2ValidationIssues;
begin
Options := THPDFUA2RepairOptions.Default;
Options.DefaultLanguage := 'en-US';
Options.CustomAttributeNamespaceURI :=
'https://example.com/ns/accessibility-attributes';
if not PDF.RepairPDFUA2Structure(Options, Report, Issues) then
raise Exception.CreateFmt('%s at %s',
[String(Issues[0].Code), String(Issues[0].Path)]);
end;