THotPDF.RepairPDFA4 Method
执行一个有界的对象图事务:应用确定性的 PDF/A-4 规范化并校验结果,然后要么提交整套安全修复,要么恢复原始文档状态
声明
function RepairPDFA4(
const Options: THPDFPDFA4RepairOptions;
out Report: THPDFPDFA4RepairReport;
out Issues: THPDFPDFA4ValidationIssues): boolean; overload;
function RepairPDFA4(
const Options: THPDFPDFA4RepairOptions;
out Report: THPDFPDFA4RepairReport;
out Issues: THPDFPDFA4ValidationIssues;
out Findings: THPDFComplianceFindings): boolean; overload;
提交契约
True表示事务被接受,也包括文档本就合规而无需改动的情形False表示事务已回滚,原因可能是超出限制、校验结果变差、抛出异常,或RequireFullConformance策略未满足Report.ValidationSucceeded是修复提交之后权威的完整合规结果- 使用默认选项时,安全修复可以提交,同时与之无关的不安全校验 finding 仍明确保留在
Issues和Findings中
安全修复边界
该方法可以规范化 PDF 2.0 header、补建缺失的 trailer ID、创建或修复 metadata stream 和字典、按 namespace URI 规范化 PDF/A 标识(同时保留任何合法的 RDF 前缀)、移除被禁止的 Catalog 条目,以及移除 alternate-presentation 结构
UTF-8 XMP 修复会移除被禁止的 packet header 字节和编码属性,改用规范的 PDF/A 标识 namespace,写入 part=4 和 rev=2020,并选择正确的 base、engineering 或 associated-file 合规属性
修复管线绝不改写页面或批注的 content stream、字体、色彩空间、transparency、图像、绘图算子,也不改写提取出的文本
回滚与可审计性
对象图快照覆盖字典变更和 metadata stream 字节,因此回滚能够恢复原始 header、trailer 状态、对象图、XMP payload 和页面内容
带共享 finding 的 overload 会附带修复动作、applied / unresolved / failed / rolled-back 状态、修复计数、稳定的规则标识符、条款、对象路径、对象编号和页面位置
对象、变更、retained-issue、解码字节和 content token 各项预算,防止恶意文件把修复本身或它的校验门槛变成无边界的工作
示例
var
Options: THPDFPDFA4RepairOptions;
Report: THPDFPDFA4RepairReport;
Issues: THPDFPDFA4ValidationIssues;
begin
Options := THPDFPDFA4RepairOptions.Default;
Options.Profile := p4pAutomatic;
if not PDF.RepairPDFA4(Options, Report, Issues) then
raise Exception.Create('PDF/A-4 repair rolled back');
if not Report.ValidationSucceeded then
LogRemainingPDFA4Issues(Issues);
end;