跳转到内容
getnextpdf.com

是什么让一份 PDF 无障碍——以及为什么这很重要

Spec: ISO 14289-1Spec: ISO 14289-2Spec: ISO 32000-2Spec: WCAG 2.2

一份无障碍的 PDF,是指一个看不见页面的人仍然能够读懂的 PDF——按你所设想的顺序,每一幅图都被描述、每一个标题都被作为标题朗读出来。本页解释一份 PDF 如何承载这层含义——带标签的内容、一棵结构树、阅读顺序、替代文本——以及为什么把它做对是值得的。

一份 PDF 在默认情况下,是一组位于各坐标处的标记。它说的是把这个字形放在这里把这张图画在那里。它本身并不会说这是一个标题这一行属于那一列,或这张图显示的是一份已签署的合同。一个有视力的读者会立刻从版式中补上这些空白。一个屏幕阅读器做不到。它只拥有文件实际陈述的那些内容。

于是一份未加标签的 PDF 可以看起来完美无缺,读起来却像一派胡言:一个两栏的页面被一路横着读过去,一张数据表被压扁成一串互不相关的数字,一张图表干脆是沉默的。信息就在页面上。它只是触达不到。对千百万人而言,这就是一份他们能用的文件与一份他们用不了的文件之间的区别——而且越来越成为一项合规的公共服务与一项法律风险之间的区别。

  • 一份带标签的 PDF 在视觉标记之上承载着一层平行的含义:这一串字形是一个标题,那一块是一个列表,这一区域是一张表格
  • 那些标签挂在一棵结构树上——一份文档的逻辑大纲,独立于各物件在页面上所处的位置(Spec: ISO 32000-2, §14.7)。
  • 这棵树确定了阅读顺序,于是内容会按你所设想的次序呈现,而不是按字形碰巧被绘制的顺序。
  • 非文本内容携带着一份文本等价物:图像的一段 /Alt 描述,或读者本会读错的一串字形的替换文本(Spec: ISO 32000-2, §14.8)。
  • PDF/UA(ISO 14289)是那个规定“以上这一切何时算齐备且正确”的标准。它正是“无障碍的 PDF”作为一项工程主张、而非营销话术时的含义(Spec: ISO 14289-1)。

把一份无障碍的 PDF 想成同行的两个层。内容层是你所看到的:字形、线条、图像,置于各坐标处。结构层是它的含义:一棵元素之树——文档、标题、段落、列表、表格、图形——为每一块内容命名,并把它放进顺序里。

这两者由标记内容缝合在一起。页面上每一段有意义的内容都被包裹起来并赋予一个标识符;对应的结构元素则指回那个标识符。正是这条链接,让辅助技术能够走遍这棵逻辑树,并在每一个节点上找到它所描述的、页面上那些确切的字节。把链接做对,一个标题就会被作为标题朗读;做错了,结构就成了一个与所显示内容不符的虚构。

这就是那个让人意外的观念。屏幕阅读器所采用的顺序,是结构树的顺序,而那与内容落在页面上何处无关(Spec: ISO 32000-2, §14.7)。你可以最后才画侧边栏、最先画脚注;只要这棵树把它们以所设想的次序串起来,文档就会读得正确。反过来,一个版式精美、树却乱了序的页面,会读得“精美地错”。版式是给眼睛的。树是给其他所有人的。

一张照片、一个徽标、一张图表、一条装饰性的横线——这些都不是文字,所以默认情况下它们都不会朗读出任何东西。带标签的 PDF 用替代描述来填补这道空缺:图像的 /Alt 文本描述它所传达的内容,而 /ActualText 为本会被读错的一串字形——例如一个连字或一个风格化的首字下沉——提供一个干净的替换(Spec: ISO 32000-2, §14.8)。纯装饰性的标记被标记为人为产物(artifact),于是它们会被跳过、而不是被当作噪声朗读出来。规则很简单:如果它承载含义,它就拿到一份文本等价物;如果它不承载,它就被标记到一旁。

当辅助技术打开一份带标签的 PDF 时,它并不读页面。它读这棵,并用标记内容的链接把每个元素的文本按顺序呈现出来。

  1. OpenThe reader finds the structure tree root in the document catalog, the entry point to the logical document.
  2. Walk the treeIt traverses the logical hierarchy — document, headings, paragraphs, lists, tables — in structure order.
  3. Map the roleEach structure type maps to a familiar role, so a heading is announced as a heading and a list as a list.
  4. Read the contentFor each element it reads the linked page text, or the alternate description when the content is an image.
  5. Skip the noiseAnything tagged as a decorative artifact is passed over, never spoken.
一个屏幕阅读器如何处理一份带标签的 PDF:它打开文档、找到结构树的根、按顺序走遍逻辑树、把每个元素映射到一个熟悉的角色、朗读该元素的文本或它的替代描述,并跳过任何被标记为装饰性的东西。阅读次序来自这棵树,而非来自内容在页面上所处的位置。

因为这个次序就是树的次序,一份正确加了标签的两栏报告会先读完一栏、再读另一栏,一张表格会带着它的表头逐格朗读,而一张图形会朗读它的描述、而不是陷入沉默。阅读器永远不必去猜作者的意图,因为意图已被记录在文件里。

这一切在 PDF/UA 之下成为一项可检核的主张。PDF/UA-1,以 ISO 14289-1 发布,在带标签的 PDF 模型之上陈述了一份无障碍 PDF 的文件级要求(Spec: ISO 14289-1, §7)。PDF/UA-2,即 ISO 14289-2,把那些要求承载到 PDF 2.0 基线之上,并细化了真实内容如何映射到结构模型(Spec: ISO 14289-2, §8)。PDF/UA 管辖的是文件的结构;更广义的 Web Content Accessibility Guidelines 描述的是一份文档据以被衡量的结果,而一项符合性主张会指明它实际达到的等级(Spec: WCAG 2.2, §5)。两者协同:PDF/UA 说明机制齐备且正确,WCAG 则界定对一个人来说怎样才算好。

标签是看不见的,所以检查它们唯一诚实的方式,就是去看某个工具所报告出来的结构。一个最小的无障碍页面拥有一棵真实的树:一个文档根、一个标题、一个段落,以及一张携带描述、而非沉默的图形。

StructTreeRoot
└─ Document
├─ H1 "Quarterly Report"
├─ P "Revenue rose across every region this quarter."
└─ Figure /Alt "Bar chart: revenue by region, all four up"

一个走遍这棵树的阅读器会朗读一个一级标题、读出那个段落,然后读出图形的描述——就按那个顺序,无论每个元素被画在何处。把这棵树剥掉,同一个页面就变成三段互不相连的字形,外加一个沉默的矩形。像素是一模一样的。体验却不是。

常见的看法是:一份 PDF“因为文本可被选中,所以是无障碍的”。文本可选中意味着那些字形是真正的字符、而不是一张扫描出来的图片——这是必要的,但远谈不上充分。没有结构树的可选文本仍然没有标题、没有阅读顺序、没有表格关系,也没有图像描述。无障碍关乎的是结构与含义,而不仅仅是可提取字符的存在。一份文件可以通过复制粘贴,却在屏幕阅读器面前彻底失败。

第二个陷阱,是把“带标签”当成一个是/否的徽章。一份文件可以带了标签却仍然出错:标签给内容贴错了标、一棵其顺序与意图不符的树、带着空白或无用 /Alt 文本的图像。带标签是这段对话的开端,而不是它的终点。

本页解释的是概念,以及定义它们的那些标准。它不是一份符合性证书,也没有任何工具能凭一己之力授予一份。

PDF/UA structural accessibility — edition availability
EditionAvailability
Core

Core writes tagged PDF: it emits a structure tree, marks decorative content as artifacts, and carries the alternate text you supply.

Pro

Adds richer structure mapping for complex layouts — multi-level tables, lists, and figures — so the tree better matches the intended reading order.

Enterprise

Adds a structural conformance check and report. It remains a structure check, not a certification — the final determination belongs to a validator and a human reviewer.

有两道边界值得明确说出来。第一,引擎能产出正确的结构,却无法评判编辑质量:它会忠实地承载一段写着“图像”的 /Alt 描述,而那是作者的责任,不是引擎的。无障碍是一项工具与人之间的协作——工具记录含义,人提供含义。第二,一次自动化检查——包括 veraPDF 这样的验证器——确认的是机制齐备且格式良好。它并不确认一个使用屏幕阅读器的人真的能理解结果。最终的签核是由人来做的。关于那次自动化检查如何融入其中,参见验证 PDF/A 与 PDF/UA

  • 标准全貌 — PDF/UA 与 WCAG 在 NextPDF 所追踪的更广义标准联盟中的位置。
  • 字体:最难的部分 — 为什么看起来正确的文本仍可能无法搜索,以及那如何触及无障碍。
  • 一份 PDF 究竟是什么 — 结构树所栖身其中的那个对象模型。
  • 验证 PDF/A 与 PDF/UA — 如何运行一次自动化符合性检查,以及它能告诉你什么、又不能告诉你什么。
  • 带标签的 PDF(Tagged PDF) — 一份在其视觉内容之上承载着一层平行结构标签的 PDF,使辅助技术能够触达文档的含义,而不只是它的标记。
  • 结构树(Structure tree) — 一份文档的逻辑大纲(根、标题、段落、列表、表格、图形),独立于页面版式记录,并用以确定阅读顺序。
  • 阅读顺序(Reading order) — 内容呈现给阅读器的次序,取自结构树、而非取自字形被绘制的位置。
  • 替代文本(Alternative text) — 非文本内容的一份文本等价物:图像的一段 /Alt 描述,或本会被读错的一串字形的 /ActualText 替换。
  • 人为产物(Artifact) — 被标记为装饰性(一条横线、一个背景、一个水印)的内容,使阅读器跳过它、而不是把它朗读出来。
  • PDF/UA — PDF/Universal Accessibility(PDF 通用无障碍),即 ISO 14289。那个定义一份带标签的 PDF 何时算真正无障碍的标准。PDF/UA-1 是 ISO 14289-1;PDF/UA-2 是 ISO 14289-2,建立在 PDF 2.0 基线之上。