【问题标题】:Define Alt text for a PDF image, in a document without a structure tree在没有结构树的文档中为 PDF 图像定义 Alt 文本
【发布时间】:2011-11-03 16:38:24
【问题描述】:

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

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

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

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

PDF 1.6 spec 声明,从 PDF 1.5 开始,可以为以下内容添加替代文本:

(PDF 1.5) 标记内容序列(参见第 10.5 节,“标记 内容”),通过附加到 带有 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 文本。

【问题讨论】:

  • 我能够生成 PDF 1.6 文档,无需修改版本,结果也没有任何变化。

标签: image pdf html alt


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    /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 规范,但对这些程序有更多了解的人必须解释为什么这可行,但我希望这对分配此任务的其他人仍然有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-13
      • 2018-10-17
      • 2011-08-09
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多