Java调用Docx4j库玩转Word文档处理

 更新时间:2025年02月09日 09:56:35   作者:五行星辰  
在 Java 开发里处理 Word 文档时,Docx4j 可是个超厉害的库,它能让咱轻松创建,读取,修改和转换 Word 文档,下面我们就来看看具体是如何操作的吧

嘿,朋友们!在 Java 开发里处理 Word 文档时,Docx4j 可是个超厉害的库,它能让咱轻松创建、读取、修改和转换 Word 文档。下面咱就详细说说怎么用 Docx4j 来处理 Word 文档。

1. 引入依赖

要是你用 Maven 管理项目,就在 pom.xml 里加上这些依赖:

<dependencies>
    <dependency>
        <groupId>org.docx4j</groupId>
        <artifactId>docx4j-JAXB-Internal</artifactId>
        <version>11.4.9</version>
    </dependency>
    <dependency>
        <groupId>org.docx4j</groupId>
        <artifactId>docx4j-JAXB-ReferenceImpl</artifactId>
        <version>11.4.9</version>
    </dependency>
    <dependency>
        <groupId>org.docx4j</groupId>
        <artifactId>docx4j</artifactId>
        <version>11.4.9</version>
    </dependency>
</dependencies>

2. 创建一个简单的 Word 文档

下面是创建一个简单 Word 文档的 Java 代码示例:

import org.docx4j.Docx4J;
import org.docx4j.convert.out.FOSettings;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.wml.P;
import org.docx4j.wml.Text;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
 
public class CreateWordDocument {
    public static void main(String[] args) {
        try {
            // 创建一个 WordprocessingMLPackage 对象,表示一个 Word 文档
            WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
            // 获取文档的主文档部分
            MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();
 
            // 创建一个段落
            P paragraph = mainDocumentPart.createParagraphOfText("这是用 Docx4j 创建的一个简单 Word 文档。");
 
            // 保存文档
            OutputStream os = new FileOutputStream(new File("output.docx"));
            Docx4J.save(wordMLPackage, os, Docx4J.FLAG_NONE);
            os.close();
 
            System.out.println("Word 文档创建成功!");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Word 文档创建失败:" + e.getMessage());
        }
    }
}

代码解释

WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();:创建一个 WordprocessingMLPackage 对象,它代表整个 Word 文档。

MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();:获取文档的主文档部分,后续操作主要在这个部分进行。

P paragraph = mainDocumentPart.createParagraphOfText("这是用 Docx4j 创建的一个简单 Word 文档。");:创建一个段落,并添加文本内容。

OutputStream os = new FileOutputStream(new File("output.docx")); 和 Docx4J.save(wordMLPackage, os, Docx4J.FLAG_NONE);:将文档保存为 output.docx 文件。

3. 读取 Word 文档内容

下面是读取 Word 文档内容的示例代码:

import org.docx4j.Docx4J;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.wml.P;
import org.docx4j.wml.Text;
 
import java.io.File;
import java.util.List;
 
public class ReadWordDocument {
    public static void main(String[] args) {
        try {
            // 加载 Word 文档
            WordprocessingMLPackage wordMLPackage = Docx4J.load(new File("input.docx"));
            // 获取主文档部分
            MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();
 
            // 获取所有段落
            List<Object> paragraphs = mainDocumentPart.getContent();
            for (Object paraObj : paragraphs) {
                if (paraObj instanceof P) {
                    P paragraph = (P) paraObj;
                    List<Object> runs = paragraph.getContent();
                    for (Object runObj : runs) {
                        if (runObj instanceof Text) {
                            Text text = (Text) runObj;
                            System.out.print(text.getValue());
                        }
                    }
                    System.out.println();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Word 文档读取失败:" + e.getMessage());
        }
    }
}

代码解释

WordprocessingMLPackage wordMLPackage = Docx4J.load(new File("input.docx"));:加载 input.docx 文件。

通过遍历主文档部分的内容,找到所有段落和文本,然后将文本内容打印出来。

4. 替换 Word 文档中的文本

下面是替换 Word 文档中指定文本的示例代码:

import org.docx4j.Docx4J;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.wml.P;
import org.docx4j.wml.Text;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.List;
 
public class ReplaceTextInWord {
    public static void main(String[] args) {
        try {
            // 加载 Word 文档
            WordprocessingMLPackage wordMLPackage = Docx4J.load(new File("input.docx"));
            // 获取主文档部分
            MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();
 
            // 要替换的文本和替换后的文本
            String oldText = "旧文本";
            String newText = "新文本";
 
            // 获取所有段落
            List<Object> paragraphs = mainDocumentPart.getContent();
            for (Object paraObj : paragraphs) {
                if (paraObj instanceof P) {
                    P paragraph = (P) paraObj;
                    List<Object> runs = paragraph.getContent();
                    for (Object runObj : runs) {
                        if (runObj instanceof Text) {
                            Text text = (Text) runObj;
                            String value = text.getValue();
                            if (value != null && value.contains(oldText)) {
                                text.setValue(value.replace(oldText, newText));
                            }
                        }
                    }
                }
            }
 
            // 保存修改后的文档
            OutputStream os = new FileOutputStream(new File("output_replace.docx"));
            Docx4J.save(wordMLPackage, os, Docx4J.FLAG_NONE);
            os.close();
 
            System.out.println("Word 文档文本替换成功!");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Word 文档文本替换失败:" + e.getMessage());
        }
    }
}

代码解释

先加载 input.docx 文件,然后遍历文档中的所有段落和文本,找到包含指定旧文本的地方,将其替换为新文本。

最后将修改后的文档保存为 output_replace.docx 文件。

嘿,朋友们!有了这些示例代码,咱就能用 Docx4j 轻松处理 Word 文档啦。赶紧动手试试,让你的 Java 程序在 Word 文档处理方面大显身手!

到此这篇关于Java调用Docx4j库玩转Word文档处理的文章就介绍到这了,更多相关Java Docx4j处理Word内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springboot项目登录校验功能实现

    Springboot项目登录校验功能实现

    本文介绍了Web登录校验的重要性,对比了Cookie、Session和JWT三种会话技术,分析其优缺点,并讲解了过滤器与拦截器的统一拦截方案,推荐使用JWT结合拦截器实现安全、高效的登录校验,下面通过实例代码讲解Springboot项目的登录校验实现,感兴趣的朋友一起看看吧
    2025-08-08
  • SpringBoot设置接口超时时间的方法

    SpringBoot设置接口超时时间的方法

    这篇文章主要介绍了SpringBoot设置接口超时时间的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Java并发编程之ThreadLocal详解

    Java并发编程之ThreadLocal详解

    今天给大家带来的是Java并发编程的相关知识,文中对ThreadLocal做了非常详细的分析及介绍,对小伙伴们很有帮助,需要的朋友可以参考下
    2021-06-06
  • java实现简单扑克牌游戏

    java实现简单扑克牌游戏

    这篇文章主要为大家详细介绍了java实现简单扑克牌游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • Freemaker Replace函数的正则表达式运用

    Freemaker Replace函数的正则表达式运用

    这篇文章主要介绍了Freemaker Replace函数的正则表达式运用 的相关资料,需要的朋友可以参考下
    2015-12-12
  • Spring5学习之基础知识总结

    Spring5学习之基础知识总结

    这篇文章主要介绍了Spring5学习之基础知识总结,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-05-05
  • 关于JAVA_HOME路径修改之后JDK的版本依然不更改的解决办法

    关于JAVA_HOME路径修改之后JDK的版本依然不更改的解决办法

    今天小编就为大家分享一篇关于JAVA_HOME路径修改之后JDK的版本依然不更改的解决办法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • mybatis plus CU自动填充 和 软删除自动填充的实现方法

    mybatis plus CU自动填充 和 软删除自动填充的实现方法

    这篇文章主要介绍了mybatis plus CU自动填充 和 软删除自动填充的实现方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • Milvus快速入门及用Java操作Milvus的全过程

    Milvus快速入门及用Java操作Milvus的全过程

    Milvus是面向向量的数据库,通过相似性搜索处理非结构化数据特征,本文给大家介绍Milvus快速入门以及用Java操作Milvus的方法,感兴趣的朋友一起看看吧
    2025-09-09
  • JAVA ImageIO.read方法报错/无效问题及解决

    JAVA ImageIO.read方法报错/无效问题及解决

    这篇文章主要介绍了JAVA ImageIO.read方法报错/无效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11

最新评论