使用iText为标记为pdf(PDF / UA)的图像添加替代文本 [英] Add alternative text for an image in tagged pdf (PDF/UA) using iText

查看:243
本文介绍了使用iText为标记为pdf(PDF / UA)的图像添加替代文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在



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



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

  public void manipulatePdf(String src,String dest)
抛出IOException,DocumentException {
PdfReader reader = new PdfReader(src);
PdfDictionary catalog = reader.getCatalog();
PdfDictionary structTreeRoot =
catalog.getAsDict(PdfName.STRUCTTREEROOT);
操纵(structTreeRoot);
PdfStamper压模=新的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(没有Alt描述的图)) );
}
PdfArray kids = element.getAsArray(PdfName.K);
如果(kids == null)返回;
for(int i = 0; i< kids.size(); i ++)
manipulate(kids.getAsDict(i));
}

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




  • PdfReader 对象中获取根词典,

  • 获取结构树的根(字典),

  • 遍历该树的每个分支的所有孩子,

  • 当一个领导是一个如图所示,添加 / Alt 条目。



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


I've looked up some documentations and examples under the http://developers.itextpdf.com/examples.

I know iText is able to generate tagged pdf from scratch, but is it possible to insert alternative text to images in an existing tagged pdf (without changing anything else)? I need to implement this feature in a program without using GUI applications (such as Adobe Acrobat Pro). Thanks.

解决方案

Please take a look at the AddAltTags example.

In this example, we take a PDF with images of a fox and a dog where the Alt keys are missing: no_alt_attribute.pdf

Code can't recognize a fox or a dog, so we create a new document with Alt attributes saying "Figure without an Alt description": added_alt_attributes.pdf)

We add this description by walking through the structure tree, looking for structural elements marked as /Figure elements:

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));
}

You can easily port this Java example to C#:

  • Get the root dictionary from the PdfReader object,
  • Get the root of the structure tree (a dictionary),
  • Loop over all the kids of every branch of that tree,
  • When a lead is a figure, add an /Alt entry.

Once this is done, use PdfStamper to save the altered file.

这篇关于使用iText为标记为pdf(PDF / UA)的图像添加替代文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆