【问题标题】:Add alternative text for an image in tagged pdf (PDF/UA) using iText使用 iText 为标记的 pdf (PDF/UA) 中的图像添加替代文本
【发布时间】:2015-12-02 06:24:47
【问题描述】:

我在http://developers.itextpdf.com/examples 下查找了一些文档和示例。

我知道 iText 能够从头开始生成带标签的 pdf,但是是否可以在现有的 带标签 pdf 中插入替代文本到图像(不更改任何其他内容)?我需要在不使用 GUI 应用程序(例如 Adob​​e Acrobat Pro)的程序中实现此功能。谢谢。

【问题讨论】:

标签: pdf itextsharp itext accessibility


【解决方案1】:

请查看AddAltTags 示例。

在此示例中,我们获取一个 PDF,其中包含缺少 Alt 键的狐狸和狗的图像:no_alt_attribute.pdf

代码无法识别狐狸或狗,因此我们创建了一个带有 Alt 属性的新文档,上面写着“没有 Alt 描述的图”:added_alt_attributes.pdf)

我们通过遍历结构树来添加这个描述,寻找标记为/Figure元素的结构元素:

public void manipulatePdf(String src, String dest)
    throws IOException, DocumentException {
    PdfReader reader = new PdfReader(src);
    PdfDictionary catalog = reader.getCatalog();
    PdfDictionary structTreeRoot =
        catalog.getAsDict(PdfName.STRUCTTREEROOT);
    manipulate(structTreeRoot);
    PdfStamper stamper = new PdfStamper(
        reader, new FileOutputStream(dest));
    stamper.close();
}

public void manipulate(PdfDictionary element) {
    if (element == null)
        return;
    if (PdfName.FIGURE.equals(element.get(PdfName.S))) {
        element.put(PdfName.ALT,
            new PdfString("Figure without an Alt description"));
    }
    PdfArray kids = element.getAsArray(PdfName.K);
    if (kids == null) return;
    for (int i = 0; i < kids.size(); i++)
        manipulate(kids.getAsDict(i));
}

您可以轻松地将这个 Java 示例移植到 C#:

  • PdfReader 对象中获取根字典,
  • 获取结构树的根(字典),
  • 循环遍历该树每个分支的所有孩子,
  • 如果潜在客户是人物,请添加 /Alt 条目。

完成后,使用PdfStamper 保存更改后的文件。

【讨论】:

  • 谢谢!这个例子完美地解决了我的问题。其实我还有另外一个相关的问题:有没有可能从标记内容里面的信息中知道是哪张图片?
  • 我会给你最烦人的答案:这取决于...如果你给我看一个 PDF,我可以告诉你信息是否在那里并且如果是这样,在哪里。但是,我担心您正在寻找的信息只是丢失了。如果该信息存在,它将作为/Alt 条目添加到/StructElem 字典中。 /Alt 条目丢失的事实让人相信您要查找的信息在文档中找不到。
  • 我明白了,也许最好的解决方案是假设图像在结构树中出现与“图形”相同的顺序。另外,另一个问题,是否可以使用 iText 自动标记未标记的 pdf,或者至少将结构树添加到未标记的 pdf?谢谢
  • 如果你想正确地标记一个PDF文档,你总是需要一个人来做出机器(或软件)无法做出的决定。跨度>
猜你喜欢
  • 2017-12-19
  • 2014-08-18
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
相关资源
最近更新 更多