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

 更新时间:2022年04月06日 10:26:13   作者:Tobemia  
这篇文章主要介绍了Java 获取Word中所有插入和删除修订,在 Word 文档中启用跟踪更改功能后,会记录文档中的所有编辑行为,例如插入、删除、替换和格式更改。对插入或删除的内容,本文介绍获取方法,需要的朋友可以参考下

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

​​引入Jar​​

​​方法1​​

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

Java 获取Word中的所有插入和删除修订_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();
}
}

获取结果:

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

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

相关文章

  • springboot2.2.2集成dubbo的实现方法

    springboot2.2.2集成dubbo的实现方法

    这篇文章主要介绍了springboot2.2.2集成dubbo的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • SpringBoot使用AOP实现统计全局接口访问次数详解

    SpringBoot使用AOP实现统计全局接口访问次数详解

    这篇文章主要介绍了SpringBoot通过AOP实现对全局接口访问次数的统计,文章从相关问题展开全文内容详情,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-06-06
  • 关于LocalDateTime使用详解

    关于LocalDateTime使用详解

    这篇文章主要介绍了关于LocalDateTime使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Springboot接收文件与发送文件实例教程

    Springboot接收文件与发送文件实例教程

    最近工作中遇到个需求,springboot简单的上传文档或者图片,并且进行操作,操作完后进行保存指定路径,下面这篇文章主要给大家介绍了关于Springboot接收文件与发送文件的相关资料,需要的朋友可以参考下
    2023-05-05
  • Idea使用插件实现逆向工程搭建SpringBoot项目的图文教程

    Idea使用插件实现逆向工程搭建SpringBoot项目的图文教程

    这篇文章主要介绍了Idea使用插件实现逆向工程搭建SpringBoot项目,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • JAVA实战项目实现客户选购系统详细流程

    JAVA实战项目实现客户选购系统详细流程

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用Java实现一个简单的客户选购系统,大家可以在过程中查缺补漏,提升水平
    2021-10-10
  • Spring 中使用反射创建 Bean 实例的几种方式

    Spring 中使用反射创建 Bean 实例的几种方式

    文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newInstance()、工厂方法以及Spring的BeanUtils工具类,文章还强调了反射操作的注意事项,如异常处理、性能、安全性以及类型安全,感兴趣的朋友一起看看吧
    2025-03-03
  • Java中的CountDownLatch闭锁详解

    Java中的CountDownLatch闭锁详解

    这篇文章主要介绍了Java中的CountDownLatch闭锁详解,CountDownLatch用给定的计数初始化,await属于阻塞方法,直到当前计数达到零,由于countDown方法被调用,然后释放所有await等待的线程,并立即返回线程后续的await调用逻辑,需要的朋友可以参考下
    2023-12-12
  • Java volatile 关键字介绍与使用示例详解

    Java volatile 关键字介绍与使用示例详解

    这篇文章详细介绍了Java中的volatile关键字,包括它的核心特性、如何保证变量的可见性和有序性,以及它在解决多线程问题中的局限性,文章通过示例展示了如何在实际编程中使用volatile,并解释了如何通过其他同步机制来弥补volatile的不足,感兴趣的朋友一起看看吧
    2025-01-01
  • java 实现约瑟夫环的实例代码

    java 实现约瑟夫环的实例代码

    这一次是借鉴模仿别人写的代码,以前觉得不好将数据结构的链结构什么的迁移到java上来使用,但这一次确实让我感受到了可以自己构造数据结构,然后使用类似链的方式来解决约瑟夫环,有所顿悟。不多说,继续上代码
    2013-10-10

最新评论