在 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—

Java 获取Word中的所有插入和删除修订相关推荐

  1. Java 在Word中合并单元格时删除重复值

    程序环境: 方法1:手动引入.将​ ​Free Spire.Doc for Java​下载到本地,解压,找到lib文件夹下的Spire.Doc.jar文件.在IDEA中打开如下界面,将本地路径中的ja ...

  2. Java在Word中插入上标和下标

    前言 在某些情况下,你可能需要在Microsoft Word中插入上标和下标.例如,当你正在创建一个涉及科学公式的学术文件时.在这篇文章中,你将学习如何使用Spire.Doc for Java库在Wo ...

  3. java提取word中的图片_Java怎么获取Word批注的文字和图片

    Java怎么获取Word批注的文字和图片 发布时间:2020-06-23 11:07:08 来源:亿速云 阅读:119 作者:Leah 这篇文章将为大家详细讲解有关Java获取Word批注的文字和图片 ...

  4. 用mendeley在word中插入文献_Mendeley在Word添加工具栏和插入和删除文献的方法 | 科研动力...

    Mendeley在Word添加工具栏和插入和删除文献的方法.Mendeley如何在Word中插入文献,刚开始使用Mendeley可能有点摸不着头脑.尤其是Mendeley安装完毕,Word中可能并没有 ...

  5. Java读取word中表格

    因为要新建一个站,公司要把word表格的部分行列存到数据库中.之前用java操作过excel,本来打算用java从word表格中读取数据,再存到数据库中,结果因为权限不够,无法访问公司要写的那个数据库 ...

  6. Java 实现word 中写入文字图片的解决方案

    Java 实现word 中写入文字图片的解决方案 参考文章: (1)Java 实现word 中写入文字图片的解决方案 (2)https://www.cnblogs.com/jianguang/p/57 ...

  7. word中,解决插入形状后固定位置不变。

    在office上的word中,如果插入形状后,默认"对象随文字移动".当出现文字或者图片的格式出现更换,该形状就会随着变化位置.或者将word转换为PDF格式后,形状也会出现位置变 ...

  8. word中如何插入abcd英文字母的页码 页码word中怎么做插入abcd英文字母的 oldtimeblog

    word中如何插入abcd英文字母的页码 页码word中怎么做插入abcd英文字母的页码 word中插入页码的时候,默认是插入的123数字页码,想要插入abcd英文字母页码,该怎么插入呢?下面我们就来 ...

  9. java实现word中嵌入附件

    前言 使用java往word中嵌入其他文件最重要的是要创建ole.目前将文件嵌入了word但是图标是没有的,因此自己生成了一个图标替代. 部分代码 代码如下: POIFSFileSystem fs = ...

最新文章

  1. 001_Ajax简介
  2. 我的技术回顾那些与ABP框架有关的故事-2018年
  3. 家的味道,家的感觉!!!
  4. 【复杂网络分析】motif、cluster、clique、community 的介绍和比较
  5. Git学习总结(11)——Git撤销操作详解
  6. mysql 添加删除权限_MySQL实例讲解:添加账户、授予权限、删除用户
  7. mysql cmmand not found
  8. 西门子 S7-200和S7-300/400 通过模块连接INTOUCH通讯方法
  9. QQ 音乐竟然可以免费听歌了,白嫖党的春天来了
  10. 【SVN】汉化包 汉化失败 问题解决
  11. j1900适合装哪版群晖_NAS部署指南 群晖篇六—— NAS兼做路由器,群晖虚拟机套件教程...
  12. Android APP隐藏图标、无启动界面、进程隐藏的方法
  13. 命令提示符命令(cmd)
  14. 一只小蜜蜂(C ++ 详解 )
  15. python对英雄皮肤进行图片采集~
  16. Vulnhub 靶机 VulnOSv2 write up opendocman cms 32075 sql注入 账号密码 ssh连接 37292.c 脏牛提权
  17. 自动化构建部署(CICD)
  18. 【Halcon 字符串与HTuple互转,double与HTuple互转,Mat与HObject互转】
  19. iOS10 获取系统通讯录新方法
  20. unity全栈开发是什么意思_为什么你应该尝试“全栈”

热门文章

  1. 非计算机管理员用户 不可以,电脑非管理员账户要怎么办
  2. 《程序员修炼之道:从小工到专家》笔记-----第二章
  3. Druid连接池加密处理
  4. php 起源来由(搜集整理)
  5. mac上配置cordova开发Android平台APP环境
  6. 双开助手多开分身版 v5.1.8
  7. /etc/ssh/ssh_config line 59: Unsupported option “gssapiauthentication“
  8. linux 库全局变量_学习嵌入式,做底层还是应用好?嵌入式Linux底层要掌握哪些技能?...
  9. NISP一级考试题目复习
  10. 一个XSS靶场练习记录