逻辑结构
逻辑结构
带标签的 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上设置Title和Language,以符合 PDF/UA 标准。 - 自上而下构建结构树:先创建元素,然后追加子元素。
- 在 figure 元素上使用
SetAlternativeText,以实现屏幕阅读器的可访问性。 - 使用
THead、TBody、TFoot标记表格,以获得正确的表格语义。 - 使用
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 / Method | Description |
|---|---|
TaggedContent | 逻辑结构操作的入口点 |
TaggedContent.SetTitle | 为可访问性设置文档标题 |
TaggedContent.SetLanguage | 设置文档语言 |
ITaggedContent | 为所有元素类型提供工厂方法的接口 |
StructureElement | 所有结构元素的基类 |
StructureElement.AppendChild | 向树中添加子元素 |
StructureElement.SetText | 设置元素的文本内容 |
TableElement | 可访问的表格结构元素 |
TableElement.CreateTHead | 创建表头部分 |
TableElement.CreateTBody | 创建表体部分 |
TableTRElement | 表格行元素 |
TableTRElement.CreateTD | 添加数据单元格 |
TableTRElement.CreateTH | 添加表头单元格 |
IllustrationElement | 图形/插图结构元素 |
IllustrationElement.SetImage | 将图像附加到插图 |