在 Word 文档中启用跟踪更改功能后,会记录文档中的所有编辑行为,例如插入、删除、替换和格式更改。对插入或删除的内容,可通过本文中介绍的方法来获取。
引入Jar
方法1
手动引入:将 Free Spire.Doc for Java 下载到本地,解压,找到lib文件夹下的Spire.Doc.jar文件。在IDEA中打开如下界面,将本地路径中的jar文件引入Java程序:
方法2
通过 Maven 仓库下载。如下配置pom.xml:
<repositories> <repository> <id>com.e-iceblue</id> <url>https://repo.e-iceblue.cn/repository/maven-public/</url> </repository> </repositories> <dependencies> <dependency> <groupId>e-iceblue</groupId> <artifactId>spire.doc.free</artifactId> <version>5.2.0</version> </dependency> </dependencies>
获取插入、删除的修订
- 创建一个 Document 实例并使用 Document.loadFromFile() 方法加载一个示例 Word 文档。
- 创建一个 StringBuilder 对象,然后使用 StringBuilder.append() 方法记录数据。
- 遍历所有 Section 和 section 中 body 下的每一个元素。
- 使用 Paragraph.isInsertRevision() 方法确定段落是否为插入修订。如果是,请使用 Paragraph.getInsertRevision() 方法获取插入修订。然后使用 EditRevision.getType() 方法和 EditRevision.getAuthor() 方法获取修订类型、作者。
- 使用 Paragraph.inDeleteRevision() 方法确定段落是否为删除修订。如果是,请使用 Paragraph.getDeleteRevision() 方法获取删除修订。然后使用 EditRevision.getType() 方法和 EditRevision.getAuthor() 方法获取修订类型、作者。
- 遍历段落中的所有元素以获取文本范围的修订。
- 使用 FileWriter.write() 方法将 StringBuilder 的内容写入 txt 文档。
Java
import com.spire.doc.*; import com.spire.doc.documents.Paragraph; import com.spire.doc.fields.TextRange; import com.spire.doc.formatting.revisions.EditRevision; import com.spire.doc.formatting.revisions.EditRevisionType; import java.io.FileWriter; public class GetAllRevisions { public static void main(String[] args)throws Exception { //加载示例 Word 文档 Document document = new Document(); document.loadFromFile(\"test.docx\"); //创建一个 StringBuilder 对象以获取插入修订 StringBuilder insertRevision = new StringBuilder(); insertRevision.append(\"INSERT REVISIONS:\"+\"\\n\"); int index_insertRevision = 0; //创建一个 StringBuilder 对象以获取删除修订 StringBuilder deleteRevision = new StringBuilder(); deleteRevision.append(\"DELETE REVISIONS:\"+\"\\n\"); int index_deleteRevision = 0; //遍历所有节 for (Section sec : (Iterable<Section>) document.getSections()) { //遍历section中body下的元素 for(DocumentObject docItem : (Iterable<DocumentObject>)sec.getBody().getChildObjects()) { if (docItem instanceof Paragraph) { Paragraph para = (Paragraph)docItem; //确定段落是否为插入修订 if (para.isInsertRevision()) { index_insertRevision++; insertRevision.append(\"Index: \" + index_insertRevision + \" \\n\"); //获取插入修订 EditRevision insRevison = para.getInsertRevision(); //获取插入的段落文本内容 String insertRevisionString = para.getText(); //获取插入修订类型 EditRevisionType insType = insRevison.getType(); insertRevision.append(\"Type: \" + insType + \" \\n\"); //获取插入修订作者 String insAuthor = insRevison.getAuthor(); insertRevision.append(\"Author: \" + insAuthor + \" \\n\" + \"InsertPara:\"+ insertRevisionString ); } //确定段落是否为删除修订 if (para.isDeleteRevision()) { index_deleteRevision++; deleteRevision.append(\"Index: \" + index_deleteRevision + \" \\n\"); EditRevision delRevison = para.getDeleteRevision(); EditRevisionType delType = delRevison.getType(); deleteRevision.append(\"Type: \" + delType + \" \\n\"); String delAuthor = delRevison.getAuthor(); deleteRevision.append(\"Author: \" + delAuthor + \" \\n\"); } //遍历段落中的元素 for(DocumentObject obj : (Iterable<DocumentObject>)para.getChildObjects()) { if (obj instanceof TextRange) { TextRange textRange = (TextRange)obj; //确定文本范围是否为删除修订,并获取删除修订的类型、作者及删除的文本内容。 if (textRange.isDeleteRevision()) { index_deleteRevision++; deleteRevision.append(\"Index: \" + index_deleteRevision +\" \\n\"); EditRevision delRevison = textRange.getDeleteRevision(); EditRevisionType delType = delRevison.getType(); deleteRevision.append(\"Type: \" + delType+ \" \\n\"); String delAuthor = delRevison.getAuthor(); deleteRevision.append(\"Author: \" + delAuthor + \" \\n\"); String deletetext = textRange.getText(); deleteRevision.append(\"Delete text:\" + deletetext +\" \\n\"); } //确定文本范围是否为插入修订,并获取插入修订的类型、作者及文本内容。 else if (textRange.isInsertRevision()) { index_insertRevision++; insertRevision.append(\"Index: \" + index_insertRevision +\" \\n\"); EditRevision insRevison = textRange.getInsertRevision(); EditRevisionType insType = insRevison.getType(); insertRevision.append(\"Type: \" + insType + \" \\n\"); String insAuthor = insRevison.getAuthor(); insertRevision.append(\"Author: \" + insAuthor + \" \\n\"); String insertText = textRange.getText(); insertRevision.append(\"insertText:\"+insertText); } } } } } } //保存插入修订内容为txt 文件 FileWriter writer1 = new FileWriter(\"insertRevisions.txt\"); writer1.write(insertRevision.toString()); writer1.flush(); writer1.close(); //保存删除修订内容为txt 文件 FileWriter writer2 = new FileWriter(\"deleteRevisions.txt\"); writer2.write(deleteRevision.toString()); writer2.flush(); writer2.close(); } }
获取结果:
—END—
来源:https://www.cnblogs.com/Yesi/p/16168896.html
本站部分图文来源于网络,如有侵权请联系删除。