Java 获取Word中所有的插入和删除修订的方法


Posted in Java/Android onApril 06, 2022

在 Word 文档中启用跟踪更改功能后,会记录文档中的所有编辑行为,例如插入、删除、替换和格式更改。对插入或删除的内容,可通过本文中介绍的方法来获取。

​​引入Jar​​

​​方法1​​

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

Java 获取Word中所有的插入和删除修订的方法

​​方法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();
}
}

获取结果:

Java 获取Word中所有的插入和删除修订的方法

到此这篇关于Java 获取Word中所有的插入和删除修订的方法的文章就介绍到这了,更多相关获取Word插入和删除修订内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
springboot项目以jar包运行的操作方法
Jun 30 Java/Android
新手初学Java List 接口
Jul 07 Java/Android
解决Jenkins集成SonarQube遇到的报错问题
Jul 15 Java/Android
Sleuth+logback 设置traceid 及自定义信息方式
Jul 26 Java/Android
SpringCloud Feign请求头删除修改的操作代码
Mar 20 Java/Android
Java实战之课程信息管理系统的实现
Apr 01 Java/Android
详解Flutter和Dart取消Future的三种方法
Apr 07 Java/Android
详细介绍Java中的CyclicBarrier
Apr 13 Java/Android
Java后端 Dubbo retries 超时重试机制的解决方案
Apr 14 Java/Android
Android Studio实现简易进制转换计算器
May 20 Java/Android
详解Spring Bean的配置方式与实例化
Jun 10 Java/Android
详解Flutter自定义应用程序内键盘的实现方法
Jun 14 Java/Android
springboot应用服务启动事件的监听实现
Apr 06 #Java/Android
Java十分钟精通进阶适配器模式
mapstruct的用法之qualifiedByName示例详解
Apr 06 #Java/Android
Spring Boot项目传参校验的最佳实践指南
springboot入门 之profile设置方式
Apr 04 #Java/Android
Java实现经典游戏泡泡堂的示例代码
Dubbo+zookeeper搭配分布式服务的过程详解
You might like
[FAQ]PHP中的一些常识:类篇
2006/10/09 PHP
php中执行系统命令的方法
2015/03/21 PHP
用Javascript读取中文COOKIE的解决办法
2007/02/15 Javascript
javascript改变position值实现菜单滚动至顶部后固定
2013/01/18 Javascript
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
js实现全屏漂浮广告移入光标停止移动
2013/12/02 Javascript
JavaScript实现文字与图片拖拽效果的方法
2015/02/16 Javascript
比较常见的javascript中定义函数的区别
2015/11/09 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
2016/08/11 Javascript
js仿QQ邮箱收件人选择与搜索功能
2017/02/10 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
浅谈在koa2中实现页面渲染的全局数据
2017/10/09 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
小程序自定义组件实现城市选择功能
2018/07/18 Javascript
el-table树形表格表单验证(列表生成序号)
2020/05/31 Javascript
vue中axios封装使用的完整教程
2021/03/03 Vue.js
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
python 查找文件夹下所有文件 实现代码
2009/07/01 Python
Python Tkinter简单布局实例教程
2014/09/03 Python
跟老齐学Python之玩转字符串(2)更新篇
2014/09/28 Python
python打开网页和暂停实例
2014/09/30 Python
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
详解Python绘图Turtle库
2019/10/12 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
大学军训自我鉴定
2013/12/15 职场文书
中学生打架检讨书
2014/02/10 职场文书
2014年端午节活动方案
2014/03/11 职场文书
青年志愿者活动总结
2014/04/26 职场文书
教师节主持词开场白
2015/05/29 职场文书
《窃读记》教学反思
2016/02/18 职场文书
用python批量解压带密码的压缩包
2021/05/31 Python