GetPDFUADiagnosticsA
PDF/UA & 可访问性
描述
末尾的 A 表示 ANSI(char)DLL 入口点,ActiveX/COM 接口仅公开 Unicode 形式。其行为与 GetPDFUADiagnostics 相同,字符串参数会按照当前的 SetAnsiMode 代码页进行解释
返回当前文档中发现的潜在 PDF/UA-1(ISO 14289-1)合规问题列表,以换行符分隔。每行包含一个问题代码,后跟冒号和易读描述。未检测到问题时返回空字符串
语法
Delphi
Function DLGetPDFUADiagnosticsA(InstanceID: Integer): PAnsiChar;
DLL
const char * DLGetPDFUADiagnosticsA(int InstanceID);
问题代码
| PDF-VERSION-LOW | 文档的 PDF 版本(记录在文件头中)低于 1.7。PDF/UA-1 依据 ISO 32000-1:2008(PDF 1.7)定义。调用 SetPDFUAMode 可自动将版本提高到 1.7 |
|---|---|
| MARKED-FALSE | MarkInfo/Marked 未设为 true;该文档不是带标签 PDF |
| LANG-MISSING | 文档目录 /Lang 条目缺失或为空,ISO 14289-1 §7.3 要求自然语言声明 |
| DISPLAYDOCTITLE-FALSE | ViewerPreferences/DisplayDocTitle 不为 true,ISO 14289-1 §7.1 要求此项为真,以便在标题栏中显示文档标题 |
| DOCINFO-TITLE-MISSING | 文档信息字典的 /Title 条目缺失或为空,PDF/UA-1 要求文档标题,以便辅助技术在打开文档时播报标题,此检查与 DISPLAYDOCTITLE-FALSE 互补:后者验证查看器是否显示标题,而此检查验证标题值本身是否存在,调用 SetInformation 并使用键 Title 设置标题 |
| XMP-NO-PDFUAID | 有关此功能、参数或返回值的说明 |
| ANNOT-NO-CONTENTS:N | N 个非豁免注释(不包括 Widget、PrinterMark 和 TrapNet 子类型)缺少 Contents 条目,ISO 14289-1 §7.18.1 要求该条目 |
| EMBED-NO-AFR:N | 有 N 个嵌入文件在其文件规范字典中缺少 AFRelationship 条目。ISO 14289-1 §7.11 要求此条目 |
| FIGURE-NO-ALT:N | N 个 Figure 或 Formula 结构元素没有 Alt 文本值。ISO 14289-1 §7.5 和 ISO 32000-1 §14.9.3 要求图形图像和数学公式都提供替代说明 |
| HEADING-LEVEL-SKIP:N | 在文档顺序中检测到 N 处标题级别跳跃(例如 H1 后紧接 H3,跳过 H2)ISO 14289-1 §7.1 和 WCAG 2.x 成功准则 1.3.1 要求标题层级连续嵌套,不得存在间隙 |
| STRUCT-UNCLOSED:N | 由于未按正确次数调用 EndTag,仍有 N 个结构元素处于打开状态,这些元素将缺失于结构树根 |
| TABLE-TH-NO-SCOPE:N | N 个 TH(表头单元格)结构元素没有 Scope 属性。ISO 32000-1 §14.8.4.3.4 表 337 将 Scope(Row、Column 或 Both)定义为描述每个表头单元格适用于哪些数据单元格的属性。没有此属性时,辅助技术无法可靠地将复杂或多表头表格中的表头与数据单元格关联。标记每个 TH 元素后,应立即调用 SetStructElemScope(或调用 AddTagAttribute 并使用 Owner='Table'、Name='Scope') |
| FORM-NO-TOOLTIP:N | N 个交互式表单字段(Widget 注释)缺少 TU(工具提示/辅助功能名称)条目,ISO 14289-1 §7.18.4 要求所有交互式表单字段都带有 TU 条目,以便辅助技术向用户说明字段用途,/TU 是屏幕阅读器朗读的辅助功能名称,不同于以编程方式使用的 /T(部分字段名称),请在创建或加载表单字段时设置 TU 值 |
| LIST-STRUCT:N | N、LI 或 LBody 结构元素出现在所需父元素之外,ISO 32000-1 §14.8.4.4 要求 LI 是 L(列表)的直接子元素,LBody 是 LI(列表项)的直接子元素,格式错误的列表嵌套会阻止辅助技术正确导航列表,请检查所有列表相关元素的 BeginTag / EndTag 调用顺序 |
| ROLEMAP-UNMAPPED:N | 文档中出现 N 个自定义结构元素类型,但 /RoleMap 字典中没有其条目。ISO 14289-1 §7.1 和 ISO 32000-1 §14.7.3 要求每个非标准结构类型均映射到标准 PDF 类型,以便辅助技术确定如何处理该元素。保存前,对每个自定义类型调用 AddRoleMap。问题说明会列出未映射的类型名称 |
| SUSPECTS-TRUE | MarkInfo/Suspects 已设为 true。ISO 14289-1 搂7.1 要求声称 PDF/UA 一致性的文件具有 false 的 Suspects 值。true 值标记标签已知包含错误。文档完全添加标签后调用 SetMarkInfo 将 Suspects 重置为 false |
| ROLEMAP-STANDARD-REMAP:N | N 个标准结构类型会在 /RoleMap 中显示为“custom”键,并会在保存时被重新映射。ISO 14289-1 §7.1 禁止重新映射 ISO 32000-1 §14.8.4 中定义的标准标记(P、H1..H6、Figure、Table 等)。详细行会列出违规的标准标记名称。请移除受影响的 AddRoleMap 调用 |
| DC-TITLE-MISSING | XMP 元数据流的 Dublin Core dc:title 缺失或为空。ISO 14289-1 §7.1 要求 Metadata 流包含能够明确标识文档的 dc:title 条目。此检查独立于 DOCINFO-TITLE-MISSING,后者仅检查 /Info /Title 条目。调用 SetPDFUAMode 可将 /Info 标题复制到 XMP 数据包 |
| TRAPNET-ANNOT:N | 在文档页面上发现 N 个 TrapNet 注释,ISO 14289-1 §7.18.2 明确禁止 PDF/UA-1 一致性文件包含 TrapNet,保存前请移除违规注释 |
| ANNOT-PAGE-NO-TABS-S:N | 有 N 个页面带有一个或多个注释,但其页面字典未设置 /Tabs /S,ISO 14289-1 §7.18.3 要求此类页面的制表顺序遵循结构树,并以 /Tabs /S 指示,请为每个包含注释的页面在页面字典中设置 /Tabs /S |
| ENCRYPT-NO-ACCESS | 文档已加密且 PDFUAMode 处于活动状态,但加密 /P 权限键的第 10 位(掩码 $200,辅助功能提取)已清除。ISO 14289-1 §7.16 要求每个加密的合规文件均允许辅助功能提取。在调用 Encrypt 前设置 PDFUAMode 时,会自动强制启用该位。若调用顺序相反,加密字典已使用旧 /P 值就位 — 请再次调用 Encrypt,以重新生成字典 |
| FIRST-HEADING-NOT-H1 | 文档顺序中的第一个标题元素不是 H1(强结构化 H 哨兵也算作级别 1)。ISO 14289-1 §7.4.2 要求非强结构化文档中的第一个标题标签必须为 H1。详细行会列出违规级别 |
| WIDGET-NO-STRUCTPARENT:N | N 个 Widget 注释缺少 /StructParent 条目。ISO 14289-1 §7.18.4 要求 Widget 注释嵌套在 Form 结构标记内;没有 /StructParent 时,根本无法从结构树访问 Widget。详情行会报告其数量。这是一项部分检查 — 尚未实现对已解析父级 /S 是否为 Form 的完整验证 |
| LIST-NO-NUMBERING:N | N 个 L(列表)结构元素缺少 ListNumbering 属性 ISO 14289-1 §7.6 要求每个 L 标签通过此属性声明其编号样式(ISO 32000-1 Table 347 规定的有效值为 None、Disc、Circle、Square、Decimal、UpperRoman、LowerRoman、UpperAlpha、LowerAlpha)请在打开每个 L 标签后调用 SetStructElemListNumbering |
| MULTIPLE-H-CHILDREN:N | N 个结构树节点包含多个直接 H(通用标题)子节点,ISO 14289-1 §7.4.4 禁止这种情况——请拆分父节,或将 H 标签替换为带编号的 H1..H6 序列 |
返回值
以换行符分隔的问题描述字符串;如果未检测到合规性问题,则为空字符串
备注
此函数旨在帮助开发人员进行诊断。它检查内存中文档的当前状态,并报告可能导致 PDF/UA-1 验证失败的问题。在加载或构建文档后调用它,可在保存前识别问题
当 SetPDFUAMode 处于活动状态且保存文档时,会在保存期间自动更正若干问题(ANNOT-NO-CONTENTS、EMBED-NO-AFR),GetPDFUADiagnostics 报告保存前状态,若问题在保存前存在,即使会在保存时自动更正,仍会列出
此函数不会修改文档
示例
var
Diag: WideString;
begin
PDFlib.SetPDFUAMode('en-US');
// ... build document
Diag := PDFlib.GetPDFUADiagnostics;
if Diag <> '' then
ShowMessage('PDF/UA issues found:'#10 + Diag);
end;另请参阅
SetPDFUAMode, SetDocumentLanguage, SetEmbeddedFileAFRelationship