1

任务是为 PDF 文档中的图像添加“Alt”文本,以便屏幕阅读器读出文本。

目前,我的 PDF 文档没有定义结构树。

可以将这样的文本添加到图像中,而无需为整个文档定义整个结构元素层次结构吗?我想在 PDF 文档中添加更改最小的 Alt 文本。我用来生成 pdf 的工具不太擅长生成结构元素。因此,我希望完全避免定义结构的需要。

我正在寻找的是类似 HTML 的行为,其中 Alt 文本在本地添加到图像标签,而不需要在其他地方进行更改。

PDF 1.6 规范指出,从 PDF 1.5 开始,可以为以下内容添加替代文本:

(PDF 1.5) 标记的内容序列(参见第 10.5 节,“标记的内容”),通过属性列表中的 Alt 条目附加到带有 Span 标签的标记内容序列。

可以在不添加任何结构元素的情况下添加这样的 Span 吗?

我的测试表明“否”,但我的测试可能并不可靠。测试生成:

ET
/Span <</Alt(This is alternate text.)>> BDC
q 180 0 0 15.84 36 747 cm /img0 Do Q
EMC
BT

在 PDF 1.4 文档中。该文档没有定义结构树:

16 0 obj<</Type/Catalog/Pages 14 0 R>>

然后我破解了第一行,并将 PDF 版本从 1.4 更改为 1.5。最终结果是 Adob​​e Reader 10 无法读取 Alt 文本。

4

2 回答 2

0

为了有一个工作的 Alt 文本,您需要定义一个结构树,这是 PDF 规范所要求的。您可以在没有结构树的情况下按照上面编写的方式定义 Alt 文本,但它是非标准的,它可能会或可能不会起作用。

于 2011-08-25T13:45:05.973 回答
0

虽然我不怀疑 iPDFdev 通常是正确的,但以下 PDF 代码让NVDA读取任意文本,在使用 Adob​​e Reader 9 打开的 PDF 1.4 文档中替换内容流的任意部分,尽管没有结构树:

/Span <</ActualText (Alt Text Here!) >> BDC
...
EMC

我必须用于相同任务的工具是PDFClown 0.1.1,我不相信它可以生成结构元素,这就是我也尝试使用 Span 元素的原因。我用来生成工作替代文本的 Java 代码如下:

PdfDictionary dict = new PdfDictionary();
dict.put(new PdfName("ActualText",false),new PdfString("Alt Text Here!"));
primitiveComposer.begin(new MarkedContent(new BeginMarkedContent(new PdfName("Span"), dict)));

// (do content stream stuff here)

primitiveComposer.end();

尽管似乎没有遵循 PDF 规范,但对这些程序有更多了解的人必须解释为什么这样做有效,但我希望这仍然对分配此任务的其他人有所帮助。

于 2012-02-24T00:10:36.173 回答