原文见:http://stackoverflow.com/questions/14738446/how-to-remove-all-comments-from-docx-file-with-docx4j,稍微修改了代码。
import java.io.FileOutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import javax.xml.bind.JAXBElement; import org.docx4j.TraversalUtil; import org.docx4j.TraversalUtil.CallbackImpl; import org.docx4j.XmlUtils; import org.docx4j.openpackaging.packages.WordprocessingMLPackage; import org.docx4j.openpackaging.parts.Part; import org.docx4j.openpackaging.parts.PartName; import org.docx4j.openpackaging.parts.Parts; import org.docx4j.openpackaging.parts.WordprocessingML.CommentsPart; import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart; import org.docx4j.wml.Body; import org.docx4j.wml.CommentRangeEnd; import org.docx4j.wml.CommentRangeStart; import org.docx4j.wml.Comments; import org.docx4j.wml.Comments.Comment; import org.docx4j.wml.ContentAccessor; import org.docx4j.wml.R.CommentReference; import org.jvnet.jaxb2_commons.ppp.Child; //原文见:http://stackoverflow.com/questions/14738446/how-to-remove-all-comments-from-docx-file-with-docx4j public class Docx4j_删除所有批注_S3_Test { public static void main(String[] args) throws Exception { Docx4j_删除所有批注_S3_Test t = new Docx4j_删除所有批注_S3_Test(); t.removeAllComment("f:/saveFile/temp/sys_07_comments - 副本.docx", "f:/saveFile/temp/sys_07_comments - 副本.docx"); } //这里2个路径可以一致 public void removeAllComment(String filePath, String savePath) throws Exception { WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage .load(new java.io.File(filePath)); //清空comments.xml内容 Parts parts = wordMLPackage.getParts(); HashMap<PartName, Part> partMap = parts.getParts(); CommentsPart commentPart = (CommentsPart) partMap.get(new PartName( "/word/comments.xml")); Comments comments = commentPart.getContents(); List<Comment> commentList = comments.getComment(); for (int i = 0, len = commentList.size(); i < len; i++) { commentList.remove(0); } //清空document.xml文件中批注 MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart(); org.docx4j.wml.Document wmlDocumentEl = (org.docx4j.wml.Document) documentPart .getContents(); Body body = wmlDocumentEl.getBody(); CommentFinder cf = new CommentFinder(); new TraversalUtil(body, cf); for (Child commentElement : cf.commentElements) { System.out.println(commentElement.getClass().getName()); Object parent = commentElement.getParent(); List<Object> theList = ((ContentAccessor) parent).getContent(); boolean removeResult = remove(theList, commentElement); System.out.println(removeResult); } wordMLPackage.save(new FileOutputStream(savePath)); } public boolean remove(List<Object> theList, Object bm) { // 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); } } return false; } static class CommentFinder extends CallbackImpl { List<Child> commentElements = new ArrayList<Child>(); public List<Object> apply(Object o) { if (o instanceof javax.xml.bind.JAXBElement && (((JAXBElement) o).getName().getLocalPart() .equals("commentReference") || ((JAXBElement) o).getName().getLocalPart() .equals("commentRangeStart") || ((JAXBElement) o) .getName().getLocalPart().equals("commentRangeEnd"))) { System.out.println(((JAXBElement) o).getName().getLocalPart()); commentElements.add((Child) XmlUtils.unwrap(o)); } else if (o instanceof CommentReference || o instanceof CommentRangeStart || o instanceof CommentRangeEnd) { System.out.println(o.getClass().getName()); commentElements.add((Child) o); } return null; } // to setParent public void walkJAXBElements(Object parent) { List children = getChildren(parent); if (children != null) { for (Object o : children) { if (o instanceof javax.xml.bind.JAXBElement && (((JAXBElement) o).getName().getLocalPart() .equals("commentReference") || ((JAXBElement) o).getName() .getLocalPart() .equals("commentRangeStart") || ((JAXBElement) o) .getName().getLocalPart() .equals("commentRangeEnd"))) { ((Child) ((JAXBElement) o).getValue()) .setParent(XmlUtils.unwrap(parent)); } else { o = XmlUtils.unwrap(o); if (o instanceof Child) { ((Child) o).setParent(XmlUtils.unwrap(parent)); } } this.apply(o); if (this.shouldTraverse(o)) { walkJAXBElements(o); } } } } } }
全文完。
相关推荐
"docx4j操作word" docx4j是一个功能强大的Java类库,用于创建和操作Microsoft Open XML文件,如Word docx、PowerPoint pptx和Excel xlsx。今天,我们将详细介绍如何使用docx4j操作Word文档。 1. Docx4j介绍 docx4...
本篇将详细介绍如何使用`docx4j`根据书签来替换Word文档中的内容。 首先,我们需要理解什么是书签。在Word文档中,书签是一种标记,可以用来标识文本或段落,以便稍后进行引用或操作。在`docx4j`中,我们可以通过...
**docx4j操作word2007** 在IT领域,docx4j是一个非常实用的Java库,专为处理Microsoft Office Open XML (OOXML) 文件格式,如.docx、.xlsx和.pptx而设计。它允许开发人员在Java应用程序中创建、修改和转换这些文档...
最近在做一个出卷系统,需要通过试卷模板从数据库中抽取题目,然后按照模板的样式生成完整的试卷,包括试卷格式的排版和图片的写入。这是用docx4j生成word文档。里面包括完整代码和所需jar包。
用docx4j,jar出去word书签,在word书签中插入文本 源码可以通过以下链接查看: https://github.com/xulp-mzl/xlp-core https://github.com/xulp-mzl/xlp-third ...实例: public static void main(String[] args) ...
使用docx4J技术操作word的读写,使用docx4J技术操作word的读写,
2. **创建新文档**:使用`org.docx4j.jaxb.Context`类初始化上下文,然后通过`org.docx4j.Docx4J.createDocument()`方法创建一个新的Word文档。 3. **操作文档内容**:可以使用`org.docx4j.model.content.Body`和`...
最新 docx4j-master最新 docx4j-master最新 docx4j-master最新 docx4j-master最新 docx4j-master最新 docx4j-master最新 docx4j-master最新 docx4j-master最新 docx4j-master最新 docx4j-master最新 docx4j-master...
- 在使用docx4j时,确保你的项目已经正确地添加了所有必要的jar包,包括docx4j的主库和任何额外的转换模块。 - 由于docx4j依赖于OpenJDK的JavaFX库来进行PDF和HTML的生成,所以你需要确认Java环境配置正确且包含这些...
在标题提到的"docx4j所有jar包"中,通常包括docx4j主库以及它所需的依赖包。这些依赖包可能包括处理XML、PDF生成、图片处理等不同功能的库,确保docx4j能顺利完成Word到PDF的转换以及其他操作。 描述中提到的"word...
这篇博客“docx4j 动态生成表格 (一 )”将引导我们深入理解如何利用docx4j库来创建和操作Word文档中的表格。 首先,让我们了解docx4j的基本概念。docx4j是一个开源项目,它允许开发者通过编程方式创建、修改和...
在描述中提到,这里已经包含了docx4j 3.3.3版本的所有jar包,你可以直接导入到你的Eclipse工程中。在Eclipse中,右键点击项目,选择"Build Path" -> "Configure Build Path" -> "Libraries" -> "Add Jars",然后浏览...
**四、docx4j的依赖** 为了使用docx4j,需要在项目中引入对应的依赖包。在Java项目中,可以通过Maven或Gradle等构建工具添加docx4j的依赖。 **五、示例代码** ```java import org.docx4j.*; public class Docx4...
在"docx4j运行需要的jar包,这里是整理好的所有必须的jar包"这一描述中,我们可以推断出这个压缩包包含了一系列docx4j运行所必需的依赖库。通常,一个完整的docx4j项目会包含以下几类jar文件: 1. **docx4j主库**:...
Apache POI是docx4j的一个重要依赖,因为它提供了对低级别Office文档结构的理解,使得docx4j能够解析和构建Word文档的内部XML结构。 除了这两个主要的jar包,其他58个jar包可能包含了docx4j的额外依赖和扩展功能。...
docx4j是一款强大的Java库,专为处理Microsoft Office 2007及更高版本的文件格式而设计,包括Word(.docx)、Excel(.xlsx)和PowerPoint(.pptx)文档。它允许开发者在Java应用程序中创建、修改和转换这些文件,...
主jar包docx4j-3.3.3.jar是docx4j的核心,包含所有主要的类和接口,用于操作OpenXML文档。依赖的jar包则提供了额外的支持,如处理XML、DOM操作和文件I/O等,确保了docx4j能够无缝地与其他Java库集成。 使用docx4j,...
word合并全家桶,包括横页和竖页兼容合并,里面包含使用文件格式转换,rtf转换为标准的word格式或者其他类型转换,jacob合并word案例及jar包,docx4j合并word案例及jar包,还有poi合并,以及Plutext-Enterprise-3.3.0.6...
docx4j解析word导入试题入库,支持图片解析,mathType公式解析,word自带数学公式解析
html模板填充生成pdf和word