<w:bookmarkStart w:id="0" w:name="_GoBack"/>
<w:bookmarkEnd w:id="0"/>
任何时候我都会在模板中进行更改,而不是最后一次更改。
此代码:
MainDocumentPart main = docx.getMainDocumentPart();
List<Object> bmList = getAllElementFromObject(main, CTBookmark.class);
CTBookmark bm = (CTBookmark) bmList.get(0);
System.out.println(bm.getName());
给了我“_ GoBack”,所以我确信找到了正确的书签。但奇怪的是,如果我这样做:
getAllElementFromObject(main, CTBookmark.class).remove(0);
书签不会被删除。要检查,此代码:
System.out.println(getAllElementFromObject(main, CTBookmark.class).size());
getAllElementFromObject(main, CTBookmark.class).remove(0);
System.out.println(getAllElementFromObject(main, CTBookmark.class).size());
返回
1
1
我应该使用其他方法删除docx4j中的书签吗?
答案 0 :(得分:1)
您没有为方法getAllElementFromObject提供代码,但我想它找不到包装在JAXB元素中的CTBookmark对象。
来自BookmarksDeleter.java sample:
// Can't just remove the object from the parent,
// since in the parent, it may be wrapped in a JAXBElement
for (Object ox : theList) {
if (XmlUtils.unwrap(ox).equals(bm)) {
return theList.remove(ox);
}
您还需要处理CTMarkupRange?
所以是的,要使用docx4j删除书签,请参阅链接的示例,或尝试RangeFinder.java