逻辑结构

逻辑结构

带标签的 PDF 包含一个逻辑结构树,用于定义文档的语义层次结构——段落、标题、表格、图形和列表。Aspose.PDF FOSS for .NET 提供 TaggedContent API,用于构建和检查此结构,这对于 PDF/UA 可访问性合规性至关重要。


访问标记内容

using var doc = new Document();
var tagged = doc.TaggedContent;
tagged.SetTitle("Accessible Document");
tagged.SetLanguage("en-US");

创建结构元素

ITaggedContent 为每种标准结构元素类型提供工厂方法。通过调用 AppendChild 将元素组装成树。

var root = tagged.RootElement;

var heading = tagged.CreateHeaderElement(1);
heading.SetText("Chapter 1");
root.AppendChild(heading);

var paragraph = tagged.CreateParagraphElement();
paragraph.SetText("This is the first paragraph.");
root.AppendChild(paragraph);

结构化表格

TableElement 创建具有 head、body 和 footer 部分的可访问表格。

var table = tagged.CreateTableElement();
root.AppendChild(table);

var thead = table.CreateTHead();
var headerRow = thead.CreateTR();
headerRow.CreateTH().SetText("Name");
headerRow.CreateTH().SetText("Value");

var tbody = table.CreateTBody();
var dataRow = tbody.CreateTR();
dataRow.CreateTD().SetText("Width");
dataRow.CreateTD().SetText("612");

插图和图表

IllustrationElement 将图像包装在结构树中。

var figure = tagged.CreateFigureElement();
figure.SetImage("chart.png");
figure.SetAlternativeText("Sales chart for Q4");
root.AppendChild(figure);

结构元素类型

API 支持完整的 PDF 结构元素类型集合:

  • 块级: Paragraph, Heading (H1-H6), List, ListItem, Table, BlockQuote, Code
  • 行内: Span, Link, Annotation, Figure, Formula
  • 分组: Division, Article, Section, Part

技巧与最佳实践

  • 始终在 TaggedContent 上设置 TitleLanguage,以符合 PDF/UA 标准。
  • 自上而下构建结构树:先创建元素,然后追加子元素。
  • 在 figure 元素上使用 SetAlternativeText,以实现屏幕阅读器的可访问性。
  • 使用 THeadTBodyTFoot 标记表格,以获得正确的表格语义。
  • 使用 PdfFormatConversionOptions 验证 PDF/UA 合规性(参见 Conversion guide)。

常见问题

问题原因修复
PDF/UA 验证失败结构树缺少必需元素确保所有内容都有相应的结构元素
标题顺序错误H2 出现在 H1 之前遵循顺序标题层级
图形没有替代文本SetAlternativeText 未调用始终为插图提供替代文本
屏幕阅读器未识别表格缺少 THead/TBody 结构使用完整的表格结构 API

常见问题

什么是标记 PDF?

带标签的 PDF 包含一个逻辑结构树,将可视内容映射到语义元素(标题、段落、表格),从而实现辅助功能工具和内容重排。

标记的 PDF 与 PDF/UA 相同吗?

PDF/UA 是一种需要标记以及额外可访问性规则的标准。
标记的 PDF 是实现 PDF/UA 合规性的前提条件。

我可以给现有的 PDF 添加标签吗?

TaggedContent API 在从头创建的文档中表现最佳。对于
已有的 PDF,请通过 Document.TaggedContent 检查结构树。


API 参考摘要

Class / MethodDescription
TaggedContent逻辑结构操作的入口点
TaggedContent.SetTitle为可访问性设置文档标题
TaggedContent.SetLanguage设置文档语言
ITaggedContent为所有元素类型提供工厂方法的接口
StructureElement所有结构元素的基类
StructureElement.AppendChild向树中添加子元素
StructureElement.SetText设置元素的文本内容
TableElement可访问的表格结构元素
TableElement.CreateTHead创建表头部分
TableElement.CreateTBody创建表体部分
TableTRElement表格行元素
TableTRElement.CreateTD添加数据单元格
TableTRElement.CreateTH添加表头单元格
IllustrationElement图形/插图结构元素
IllustrationElement.SetImage将图像附加到插图

另请参见

 中文