java - docx4j - 删除 wml P 元素

标签 java ms-word docx4j

我正在使用 docx4j 来处理 Microsoft Word 模板。我想知道如何删除或隐藏模板中的 P 元素。我能够遍历代码以获得特定的 P 元素,现在我需要知道如何删除或隐藏该 P 元素。谁能帮忙?我使用以下代码获取所有 P 元素:

private static List<Object> getAllElementFromObject(Object obj, Class<?> toSearch) {

    List<Object> result = new ArrayList<Object>();
    if (obj instanceof JAXBElement) obj = ((JAXBElement<?>) obj).getValue();

    if (obj.getClass().equals(toSearch))
        result.add(obj); 
    else if (obj instanceof ContentAccessor) {
        List<?> children = ((ContentAccessor) obj).getContent();
        for (Object child : children) {
            result.addAll(getAllElementFromObject(child, toSearch));
        }
    }
    return result; 
}

private void replaceTextValue_P(WordprocessingMLPackage template ) throws Exception{        

    List<Object> texts = getAllElementFromObject(template.getMainDocumentPart(), P.class);

    // List<Object> pCon = new ArrayList<Object>();

    for (Object text : texts) {         
        P textElement = (P) text;
        template.getMainDocumentPart().getContent().remove(textElement); // DOES NOT WORK!

      writeDocxToStream(template, "C:\\Temp\\Target.docx");
}
}

private void writeDocxToStream(WordprocessingMLPackage template, String target) throws IOException, Docx4JException {

    File f = new File(target);
    template.save(f);
}

最佳答案

如果你想删除一个P(即textElement instanceof P),你只需将它从包含列表中删除,即

template.getMainDocumentPart().getContent().remove(textElement )

但我认为你的意思是删除文本内容。

工作方式相同,即:

p.getContent().remove(textElement )

看着:

public void replaceElement(Object current, List insertions) {
    int index = content.indexOf(current);

    if (index > -1 ) {          
        content.addAll(index+1, insertions);  
        Object removed = content.remove(index);

        // sanity check
        if (!current.equals(removed)) {
            log.error("removed wrong object?");
        }           
    } else {
        // Not found
        log.error("Couldn't find replacement target.");
    }
} 

如果您传入的当前 Object 仅匹配包装在 JAXBElement 中的内容,则该方法将无法正常工作。它需要一个小的修复来解决这种情况。

关于java - docx4j - 删除 wml P 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28026290/

相关文章:

java - POI docx段落大纲解析

java - 以编程方式将网站放入新的 Word 文件中......在 Java 中

java - 如何使用 apache poi 将 .docx 转换为 .doc

java - 暴力破解: Find Digits

java - 设置图像资源

ms-word - 将 doc 文件插入当前打开的文档中的光标位置(使用 insertFileFromBase64 )

docx4j - 如何使用 docx4j 从 docx 文件中删除所有评论?

java - 如何接受 docx 中的修订/跟踪更改 (ins/del)?

java - 如何使用 JPA、Hibernate 与同一实体建立关系

java - 当作业到达 threadPoolExecution 时调用所有线程