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

在 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-iceblueid>
            <url>https://repo.e-iceblue.cn/repository/maven-public/url>
        repository>
    repositories>
<dependencies>
    <dependency>
        <groupId>e-icebluegroupId>
        <artifactId>spire.doc.freeartifactId>
        <version>5.2.0version>
    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) document.getSections())
        {
            //遍历section中body下的元素
            for(DocumentObject docItem : (Iterable)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)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中的所有插入和删除修订

—END—

Original: https://www.cnblogs.com/Yesi/p/16168896.html
Author: E-iceblue
Title: Java 获取Word中的所有插入和删除修订

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/537515/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • go实现用户状态的锁定和解锁功能

    1、前端页面js代码传值 function changeLock(id) { var url = ‘{{ urlfor "BackendUserController.Ch…

    Java 2023年6月13日
    064
  • 【上云】网站备案

    此前因为gitee图床挂了换了github,然后网速一般打算搞七牛云,然而七牛云需要备案域名(不然临时外链只能维持30days) 2022-5-19腾讯云服务器+阿里云域名在腾讯云…

    Java 2023年6月5日
    073
  • JVM诊断命令jcmd介绍

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。 简介 从JDK7开始,jdk提供了一个方便扩展的诊断命令jcmd,用来取代之前比较分散的jdk基础命…

    Java 2023年6月7日
    083
  • 安装ubuntu

    ubuntu是一个以桌面应用为主的开源CNU/Linux操作系统,专业的Python开发者一般会选择Ubuntu这款Linux系统作为生产平台. 安装地址 https://cn.u…

    Java 2023年6月5日
    087
  • git 本地项目与远程地址建立连接

    git 本地项目与远程地址建立连接 建立好远程仓库与本地项目地址后在本地项目文件夹内初始化git仓库 git init 复制远程项目路径地址,后执行: git remote add…

    Java 2023年6月5日
    0144
  • springboot自动配置原理以及手动实现配置类

    springboot自动配置原理以及手动实现配置类 1、原理 spring有一个思想是”约定大于配置”。 配置类自动配置可以帮助开发人员更加专注于业务逻辑开…

    Java 2023年6月15日
    082
  • IBM MQ Explorer 示例操作

    此示例为双向传输 建立队列管理器 建立【test01】【test02】两个队列管理器,一直下一步即可,端口号不能一致(需要记住设置的端口号,后面会用到) 【test01】端口号 1…

    Java 2023年5月29日
    075
  • 并发编程的基础知识篇

    计算机与进程和线程之间的关系 1.计算机中有一个重要的指标就是CPU,而CPU中又有一个重要的指标就和核心数。 2.每当我们开启一个软件的时候,如QQ,微信(运行中的程序,被称为进…

    Java 2023年6月15日
    094
  • 使用Foxit Reader实现批量打印以及一页多版设置技巧

    阅文时长 | 0.36分钟字数统计 | 587.2字符主要内容 | 1、引言&背景 2、批量打印软件 3、Foxit Reader设置一页多版 4、声明与参考资料『使用Fo…

    Java 2023年6月5日
    0167
  • virtual box入门使用+踩坑

    事实上我并不是完全安装上面步骤进行安装,在vagrant 使用上,我选择的是使用命令行 进行虚拟机配置。 安装完virtual后,记得把虚拟机存储路径变为非C盘。不然C盘分分钟爆炸…

    Java 2023年6月7日
    071
  • Springboot整合Redis入门完整篇,零基础入门教学教程

    记录一次简易集成Redis缓存 自定义Redisconfig配置 自定义序列化操作 加深印像 整合前提工具环境准备: 1、redis官网 https://redis.io/down…

    Java 2023年6月5日
    081
  • 十三、常用类(完结)

    十三、常用类 13.1 包装类 13.1.1 包装类的分类 介绍:针对八种基本数据类型对应的引用类型作用:可以调用包装类里面的方法分类: 13.1.2 包装类的继承关系 学一个类首…

    Java 2023年6月5日
    054
  • Spring事件监听机制源码解析

    Spring事件监听器使用 1.Spring事件监听体系包括三个组件:事件、事件监听器,事件广播器。 事件:定义事件类型和事件源,需要继承ApplicationEvent。 pac…

    Java 2023年6月13日
    077
  • Mybatis 请求参数Integer类型值为0源码处理

    mybatis在做条件查询时,如果传⼊参数为Integer类型且值为0时,如下代码,status!=”的值为false为什么?mybatis把0转成空串了?看到⽹上的答…

    Java 2023年5月30日
    093
  • 1.Spring jar包依赖

    <dependency> <groupid>commons-cli</groupid> <artifactid>commons-cl…

    Java 2023年6月13日
    098
  • Mall商城的高级篇的开发(二)性能压测和性能监控

    Mall商城的高级篇的开发(二) 性能压测–压力测试 压力测试考察当前软件硬件环境下系统所能承受的最大负荷并帮助找出系统的瓶颈所在。压测都是为了系统在上线的处理能力和稳…

    Java 2023年6月5日
    095
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球