Java調(diào)用Docx4j庫(kù)玩轉(zhuǎn)Word文檔處理
嘿,朋友們!在 Java 開發(fā)里處理 Word 文檔時(shí),Docx4j 可是個(gè)超厲害的庫(kù),它能讓咱輕松創(chuàng)建、讀取、修改和轉(zhuǎn)換 Word 文檔。下面咱就詳細(xì)說(shuō)說(shuō)怎么用 Docx4j 來(lái)處理 Word 文檔。
1. 引入依賴
要是你用 Maven 管理項(xiàng)目,就在 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. 創(chuàng)建一個(gè)簡(jiǎn)單的 Word 文檔
下面是創(chuàng)建一個(gè)簡(jiǎn)單 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 {
// 創(chuàng)建一個(gè) WordprocessingMLPackage 對(duì)象,表示一個(gè) Word 文檔
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
// 獲取文檔的主文檔部分
MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();
// 創(chuàng)建一個(gè)段落
P paragraph = mainDocumentPart.createParagraphOfText("這是用 Docx4j 創(chuàng)建的一個(gè)簡(jiǎn)單 Word 文檔。");
// 保存文檔
OutputStream os = new FileOutputStream(new File("output.docx"));
Docx4J.save(wordMLPackage, os, Docx4J.FLAG_NONE);
os.close();
System.out.println("Word 文檔創(chuàng)建成功!");
} catch (Exception e) {
e.printStackTrace();
System.out.println("Word 文檔創(chuàng)建失?。? + e.getMessage());
}
}
}代碼解釋
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();:創(chuàng)建一個(gè) WordprocessingMLPackage 對(duì)象,它代表整個(gè) Word 文檔。
MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();:獲取文檔的主文檔部分,后續(xù)操作主要在這個(gè)部分進(jìn)行。
P paragraph = mainDocumentPart.createParagraphOfText("這是用 Docx4j 創(chuàng)建的一個(gè)簡(jiǎn)單 Word 文檔。");:創(chuàng)建一個(gè)段落,并添加文本內(nèi)容。
OutputStream os = new FileOutputStream(new File("output.docx")); 和 Docx4J.save(wordMLPackage, os, Docx4J.FLAG_NONE);:將文檔保存為 output.docx 文件。
3. 讀取 Word 文檔內(nèi)容
下面是讀取 Word 文檔內(nèi)容的示例代碼:
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 文件。
通過(guò)遍歷主文檔部分的內(nèi)容,找到所有段落和文本,然后將文本內(nèi)容打印出來(lái)。
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 文檔啦。趕緊動(dòng)手試試,讓你的 Java 程序在 Word 文檔處理方面大顯身手!
到此這篇關(guān)于Java調(diào)用Docx4j庫(kù)玩轉(zhuǎn)Word文檔處理的文章就介紹到這了,更多相關(guān)Java Docx4j處理Word內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot項(xiàng)目登錄校驗(yàn)功能實(shí)現(xiàn)
本文介紹了Web登錄校驗(yàn)的重要性,對(duì)比了Cookie、Session和JWT三種會(huì)話技術(shù),分析其優(yōu)缺點(diǎn),并講解了過(guò)濾器與攔截器的統(tǒng)一攔截方案,推薦使用JWT結(jié)合攔截器實(shí)現(xiàn)安全、高效的登錄校驗(yàn),下面通過(guò)實(shí)例代碼講解Springboot項(xiàng)目的登錄校驗(yàn)實(shí)現(xiàn),感興趣的朋友一起看看吧2025-08-08
SpringBoot設(shè)置接口超時(shí)時(shí)間的方法
這篇文章主要介紹了SpringBoot設(shè)置接口超時(shí)時(shí)間的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
java實(shí)現(xiàn)簡(jiǎn)單撲克牌游戲
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單撲克牌游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09
Freemaker Replace函數(shù)的正則表達(dá)式運(yùn)用
這篇文章主要介紹了Freemaker Replace函數(shù)的正則表達(dá)式運(yùn)用 的相關(guān)資料,需要的朋友可以參考下2015-12-12
Spring5學(xué)習(xí)之基礎(chǔ)知識(shí)總結(jié)
這篇文章主要介紹了Spring5學(xué)習(xí)之基礎(chǔ)知識(shí)總結(jié),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-05-05
關(guān)于JAVA_HOME路徑修改之后JDK的版本依然不更改的解決辦法
今天小編就為大家分享一篇關(guān)于JAVA_HOME路徑修改之后JDK的版本依然不更改的解決辦法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-04-04
mybatis plus CU自動(dòng)填充 和 軟刪除自動(dòng)填充的實(shí)現(xiàn)方法
這篇文章主要介紹了mybatis plus CU自動(dòng)填充 和 軟刪除自動(dòng)填充的實(shí)現(xiàn)方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07
Milvus快速入門及用Java操作Milvus的全過(guò)程
Milvus是面向向量的數(shù)據(jù)庫(kù),通過(guò)相似性搜索處理非結(jié)構(gòu)化數(shù)據(jù)特征,本文給大家介紹Milvus快速入門以及用Java操作Milvus的方法,感興趣的朋友一起看看吧2025-09-09
JAVA?ImageIO.read方法報(bào)錯(cuò)/無(wú)效問(wèn)題及解決
這篇文章主要介紹了JAVA?ImageIO.read方法報(bào)錯(cuò)/無(wú)效問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11

