使用iText为标记为pdf(PDF / UA)的图像添加替代文本

时间:2015-12-02 06:24:47

标签: pdf itextsharp itext accessibility

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

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

1 个答案:

答案 0 :(得分:1)

请查看AddAltTags示例。

在这个例子中,我们拍摄了一张PDF,其中包含缺少Alt键的狐狸和狗的图像:no_alt_attribute.pdf

enter image description here

代码无法识别狐狸或狗,因此我们使用Alt属性创建一个新文档,说“没有替代描述的图”:added_alt_attributes.pdf)

enter image description here

我们通过遍历结构树添加此描述,查找标记为/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保存更改的文件。