THotPDF.RepairPDFUA2Structure メソッド
復元可能な PDF/UA-2 の namespace、属性、構造、アクセシビリティ上の欠陥を copy-on-write のグラフトランザクション内で修復し、コミット前に候補グラフを検証します
宣言
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 ごとに 1 つの正準な間接ディクショナリで StructTreeRoot/Namespaces を再構築し、競合する role map を拒否します |
RegisterReferencedNamespaces | 構造要素、属性、namespace 対応の role map から参照される有効な namespace ディクショナリを登録します |
RepairStandardStructureNamespaces | namespace が欠落または無効な場合に標準ロールへ PDF 2.0 namespace を割り当て、トップレベルの Document は常に正規化します |
RepairAttributeNamespaces | 属性の namespace 参照を正準化し、標準オーナーから無効な namespace エントリを取り除きます |
RepairAttributeRevisions | 負や小数の revision 番号を正規化し、属性配列から孤立した revision エントリを取り除きます |
RepairListSemantics | リスト内容を捏造せずに、番号付け、継続フラグ、無効な継続型、位置がずれた 1 つの caption を正規化します |
RepairTableSemantics | 無効な span と scope を正規化し、無効なテーブルローカルの header 参照を取り除き、位置がずれた 1 つの caption を移動します |
RepairRubyWarichuSequences | 要求されるロールの多重集合が正確に揃っている場合にだけ子を並べ替えます |
RepairPronunciationHints | 型の誤った hint を取り除き、無効な lexicon 参照を刈り込み、埋め込み PLS の MIME サブタイプを正規化します |
RepairMissingAlternateText | Figure、Formula、Form に欠落した Alt を、既存のタイトル、expansion テキスト、同一 MCID の抽出テキスト、明示的なフォールバックの順で復元します |
RepairLanguageInheritance | 有効な構造ルートまたは明示的なデフォルト言語を Catalog へ昇格し、継承が曖昧でない場合に無効または冗長な構造レベルの言語エントリを取り除きます |
RepairHeadingOrder | 見出しの最初のレベル欠落とレベル飛ばしの欠陥だけを、ドキュメント順を保ちながら再番号付けします |
RepairArtifactTagging | producer と読み込みページのコンテンツについて、Artifact 構造要素に関連付けられた marked-content タグを書き換えます |
AllowDocumentFragmentHeadingStarts | 修復と修復後検証の両方で、各 DocumentFragment 内の見出しコンテキストをリセットします |
RollbackOnValidationFailure | 修復後も PDF/UA-2 エラーが 1 つでも残る場合に元のグラフを復元します |
CustomAttributeNamespaceURI | セマンティクスを安全に推定できないカスタム属性オーナーのための明示的な namespace を指定します。デフォルトは空でフェイルクローズします |
DefaultLanguage | Catalog にも構造ルートにも有効な言語が存在しない場合にだけ BCP-47 言語タグを指定します |
FallbackAlternateText | ドキュメント由来のソースがすべて失敗した後の、呼び出し側が確認した alternate text を指定します。デフォルトは空で、説明を捏造することはありません |
MaxGeneratedAlternateTextCharacters | 同一 MCID のテキスト抽出に上限を設け、デフォルトは 4,096 UTF-16 コードユニットです |
MaxObjects | オブジェクトグラフ走査に上限を設け、デフォルトは 1,000,000 オブジェクトです |
MaxRepairs | 保持される変更に上限を設け、デフォルトは 100,000 修復操作です |
修復レポート
THPDFUA2RepairReport は、グラフが変更されたかロールバックしたか、上限を超えたか、修復後の検証ステータス、走査したオブジェクト、残存エラー、alternate text、言語エントリ、見出しレベル、Artifact タグを含む各修復ファミリーのカウントを報告します
UnresolvedAlternateTextCount、UnresolvedLanguageCount、UnresolvedArtifactCount は、自動的な変更と、依然として作成者の見直しが必要なセマンティクスを区別します
返される THPDFUA2ValidationIssues 配列には、検証失敗時の修復後診断と、リソース上限や競合する重複 role map でトランザクションが中断されたときの安定した修復固有の診断が入ります
詳細オーバーロードはさらに、crsApplied、crsUnresolved、crsRolledBack、crsFailed として注釈された修復前の findings と、各修復ファミリーの集計件数を返します
この provenance オーバーロードは上限付きの修復前検証パスを追加で実行します。最終レポートと issues だけでよい場合は、既存の 3 出力オーバーロードを使ってください
アトミック性と安全性
- すべての変更は、新たに割り当てられた間接 namespace ディクショナリを含め、ドキュメントグラフトランザクションに参加します
- 重複する namespace ディクショナリは、role mapping が一致する場合にのみマージされます
CustomAttributeNamespaceURIが明示的に指定されない限り、カスタム属性のセマンティクスは捏造されませんFallbackAlternateTextが明示的に指定されない限り、alternate text は捏造されません- producer 側のページコンテンツ編集は検証が成功するまでステージングされ、読み込みストリームの編集はグラフトランザクション内に留まります
- 曖昧なテーブル交差、欠落した構造子、競合する ID、未解決の継続ターゲット、欠落した header セマンティクスは決して推測されません
- デフォルトのポリシーは、無関係な 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;