我正在使用 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
(ie 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
。它需要一个小修复来解决这种情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)