4

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

 2 years ago
source link: https://www.cnblogs.com/Yesi/p/16168896.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK