Apache Poi Word表,有关Alt Text的信息

时间:2017-05-03 07:52:07

标签: apache ms-word apache-poi

如何从Word中的表中获取Alt文本,例如标题或说明。 我找到的所有信息都有上下文,文本,宽度,样式等来阅读或修改。

我的目标是识别模板中的某些表,以便我可以修改它们。

2 个答案:

答案 0 :(得分:1)

我将在这里做一些假设。首先,你在谈论docx格式,其次是“替代文字”,你的意思是标题。

标题只是一个在表格之前或之后的段落。它的样式为Caption,运行时带有一些文本,如 Table ,可能包含一个简单的字段SEQ Table。这将是默认的表格标题,但它可能只是一个名称为 Department Heads 的运行。关键是样式名称。 Word使用标准样式名称来计算其他内容,例如TOC

Word中的

注意:,您无法通过选择表格并单击菜单选项来修改标题。它并没有以任何有意义的方式联系起来。你必须修改段落。

因此,要查找标题,您需要查看文档元素列表XWPFDocument.getBodyElements(),并找到样式为Caption的每个段落。找到想要的那个后,您可以查看上方或下方的元素以查找该表。如果你知道字幕全部高于或低于表格,那么你的搜索会更容易。

所以要按照特定的命名标题检索表格,我会尝试这样的事情:

public XWPFTable FindTable(String name) {
    boolean foundTable = false;
    XWPFParagraph p;
    for (IBodyElement elem : doc.getBodyElements()) {
        switch (elem.getElementType()) {
        case PARAGRAPH:
            foundTable = false;
            p = (XWPFParagraph) elem;
            if (p.getStyle() == "Caption" && p.getText() == name) {
                foundTable = true;
            }
            break;
        case TABLE:
            if (foundTable) {
                return (XWPFTable) elem;
            }
            break;
        case CONTENTCONTROL:
            foundTable = false;
            break;
        default:
            foundTable = false;
            break;
        }
    }

    return null;
}

答案 1 :(得分:0)

在Word中,您可以将表格标题设置为唯一的,然后以xml:

获取表格
String tableXML = mytable.getCTTbl();

提取表格标题:

String[] xml = tableXML.split(System.lineSeparator());
String caption = null;
for (String x : xml)
{
    if (x.contains("w:tblCaption"))
    {
        caption = x.split("w:val=")[1].replace("/>", "");
        caption = caption.replace("\"", "");
    }
}