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

博客 动态
0 307
羽尘
羽尘 2022-04-20 10:58:11
悬赏:0 积分 收藏

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

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

 

posted @ 2022-04-20 10:47 E-iceblue 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    羽尘

    羽尘 (王者 段位)

    2335 积分 (2)粉丝 (11)源码

     

    温馨提示

    亦奇源码

    最新会员