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集成Redis,并自定义对象序列化操作
Jun 22 Java/Android
Java多条件判断场景中规则执行器的设计
Jun 26 Java/Android
分析JVM源码之Thread.interrupt系统级别线程打断
Jun 29 Java/Android
使用Spring处理x-www-form-urlencoded方式
Nov 02 Java/Android
SSM项目使用拦截器实现登录验证功能
Jan 22 Java/Android
Java如何实现通过键盘输入一个数组
Feb 15 Java/Android
Java实现经典游戏泡泡堂的示例代码
Apr 04 Java/Android
Java 通过手写分布式雪花SnowFlake生成ID方法详解
Apr 07 Java/Android
Spring Boot配合PageHelper优化大表查询数据分页
Apr 20 Java/Android
Spring中的@Transactional的工作原理
Jun 05 Java/Android
SpringBoot使用ip2region获取地理位置信息的方法
Jun 21 Java/Android
Java Spring读取和存储详细操作
Aug 05 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
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
javascript制作坦克大战全纪录(2)
2014/11/27 Javascript
JavaScript实现防止网页被嵌入Frame框架的代码分享
2014/12/29 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
jquery实现鼠标滑过显示提示框的方法
2015/02/05 Javascript
jQuery中closest和parents的区别分析
2015/05/07 Javascript
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
2015/09/02 Javascript
AngularJS入门教程之AngularJS模型
2016/04/18 Javascript
Javascript之String对象详解
2016/06/08 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
简单的js表格操作
2016/09/24 Javascript
Angularjs之filter过滤器(推荐)
2016/11/27 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
2017/01/04 Javascript
简单实现jQuery多选框功能
2017/01/09 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
vue + socket.io实现一个简易聊天室示例代码
2017/03/06 Javascript
深入探究AngularJs之$scope对象(作用域)
2017/07/20 Javascript
使用JS实现图片轮播的实例(前后首尾相接)
2017/09/21 Javascript
微信小程序url与token设置详解
2017/09/26 Javascript
利用vue + koa2 + mockjs模拟数据的方法教程
2017/11/22 Javascript
深入浅析var,let,const的异同点
2018/08/07 Javascript
JS求1到任意数之间的所有质数的方法详解
2019/05/20 Javascript
vue的hash值原理也是table切换实例代码
2020/12/14 Vue.js
[02:05]DOTA2完美大师赛趣味视频之看我表演
2017/11/18 DOTA
[02:00]DAC2018主宣传片——龙征四海,剑问东方
2018/03/20 DOTA
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
详解Python并发编程之创建多线程的几种方法
2019/08/23 Python
python rsync服务器之间文件夹同步脚本
2019/08/29 Python
大学毕业生最详细的自我评价分享
2013/11/18 职场文书
大学中国梦演讲稿
2014/04/23 职场文书
领导干部作风建设总结
2014/10/23 职场文书
青年教师个人总结
2015/02/11 职场文书
有关朝花夕拾的读书笔记
2015/06/29 职场文书
一文简单了解MySQL前缀索引
2022/04/03 MySQL