欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 用 Docx4j 玩转 Word 文档处理

用 Docx4j 玩转 Word 文档处理

2025/6/24 11:01:42 来源:https://blog.csdn.net/wang543203/article/details/145523988  浏览:    关键词:用 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 文档处理方面大显身手!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词