XWPFDocument生成word文檔介紹(格式 .docx)

以下是針對 XWPFDocument 的詳細解析,涵蓋其核心功能、常見用法及實際開發中的關鍵點:


XWPFDocument

    • 1. XWPFDocument 簡介
    • 2. 核心結構與類
    • 3. 核心操作詳解
      • **3.1 段落與文本**
      • **3.2 表格操作**
      • **3.3 列表與編號**
      • **3.4 圖片插入**
    • 4. 高級功能
      • **4.1 頁眉與頁腳**
      • **4.2 超鏈接**
      • **4.3 分頁符**
    • 5. 樣式與模板
      • **5.1 使用預定義樣式**
      • **5.2 自定義樣式**
    • 6. 最佳實踐與注意事項
    • 7. 常見問題解決

1. XWPFDocument 簡介

XWPFDocument 是 Apache POI 庫中用于操作 .docx 格式 Word 文檔的核心類。它提供對文檔內容(段落、表格、圖片、樣式等)的動態生成和修改能力,適用于需要自動化生成復雜 Word 文檔的場景。

在pom.xml中添加Apache POI依賴:

<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version>
</dependency>

2. 核心結構與類

類/接口功能說明
XWPFDocument文檔對象,代表整個 .docx 文件,管理所有內容元素。
XWPFParagraph段落對象,控制文本塊(如標題、正文、列表)。
XWPFRun段落內的文本片段,可單獨設置樣式(字體、顏色、加粗等)。
XWPFTable表格對象,支持動態創建表格、合并單元格、設置邊框等。
XWPFPicture圖片對象,用于插入本地或網絡圖片。
XWPFHeader/XWPFFooter頁眉和頁腳,支持全局或分節設置。

3. 核心操作詳解

3.1 段落與文本

// 1. 加載模板(文件要在src/main/resources目錄下)ClassPathResource resource = new ClassPathResource("template/report_template.docx");XWPFDocument document = new XWPFDocument(resource.getInputStream());// 創建段落
XWPFParagraph para = document.createParagraph();
para.setAlignment(ParagraphAlignment.CENTER);  // 對齊方式(居中)
para.setIndentationFirstLine(600);             // 首行縮進(單位:TWIP)// 添加文本片段
XWPFRun run = para.createRun();
run.setText("Hello World!");
run.setBold(true);                            // 加粗
run.setFontSize(14);                          // 字號
run.setFontFamily("宋體");                     // 解決中文亂碼的關鍵
run.setColor("FF0000");                       // 字體顏色(RGB 十六進制)
run.addBreak();                               // 換行(類似 <br>)

3.2 表格操作

// 創建表格(3行3列)
XWPFTable table = document.createTable(3, 3);// 設置列寬(單位:TWIP)
CTTblGrid grid = table.getCTTbl().addNewTblGrid();
grid.addNewGridCol().setW(3000);
grid.addNewGridCol().setW(3000);
grid.addNewGridCol().setW(3000);// 填充表頭
XWPFTableRow headerRow = table.getRow(0);
headerRow.getCell(0).setText("姓名");
headerRow.getCell(1).setText("年齡");
headerRow.getCell(2).setText("部門");// 合并單元格(橫向)
mergeCellsHorizontal(table, 1, 0, 1);
table.getRow(1).getCell(0).setText("合并示例");// 設置表格邊框
CTBorder border = CTBorder.Factory.newInstance();
border.setVal(STBorder.SINGLE);
border.setSz(BigInteger.valueOf(4));  // 邊框粗細
table.setTopBorder(border);           // 上邊框
table.setBottomBorder(border);        // 下邊框

3.3 列表與編號

// 創建編號列表
XWPFParagraph listPara = document.createParagraph();
listPara.setNumID(/* 編號ID,需通過樣式定義 */);
XWPFRun listRun = listPara.createRun();
listRun.setText("列表項1");// 多級列表
CTAbstractNum abstractNum = CTAbstractNum.Factory.newInstance();
// ... 定義多級編號規則(需操作 XML 底層結構)

3.4 圖片插入

// 從本地文件讀取圖片
byte[] imageBytes = Files.readAllBytes(Paths.get("path/to/image.png"));
XWPFParagraph imagePara = document.createParagraph();
XWPFRun imageRun = imagePara.createRun();
imageRun.addPicture(new ByteArrayInputStream(imageBytes),Document.PICTURE_TYPE_PNG,"image.png",Units.toEMU(200),   // 寬度(200像素)Units.toEMU(150)    // 高度(150像素)
);

4. 高級功能

4.1 頁眉與頁腳

// 創建頁眉
XWPFHeader header = document.createHeader(HeaderFooterType.DEFAULT);
XWPFParagraph headerPara = header.createParagraph();
headerPara.createRun().setText("公司機密 - 第1頁");// 創建頁腳(帶頁碼)
XWPFFooter footer = document.createFooter(HeaderFooterType.DEFAULT);
XWPFParagraph footerPara = footer.createParagraph();
footerPara.setAlignment(ParagraphAlignment.CENTER);
footerPara.createRun().setText("頁碼:");
footerPara.getCTP().addNewFldSimple().setInstr("PAGE \\* MERGEFORMAT");

4.2 超鏈接

// 插入超鏈接
CTHyperlink cthyperlink = paragraph.getCTP().addNewHyperlink();
cthyperlink.setId(document.getPackagePart().addExternalRelationship("https://example.com", XWPFRelation.HYPERLINK.getRelation()
).getId());
XWPFRun linkRun = paragraph.createRun();
linkRun.setText("訪問示例網站");
linkRun.setUnderline(UnderlinePatterns.SINGLE);
linkRun.setColor("0000FF");

4.3 分頁符

// 強制分頁
XWPFParagraph pageBreakPara = document.createParagraph();
pageBreakPara.createRun().addBreak(BreakType.PAGE);

5. 樣式與模板

5.1 使用預定義樣式

// 設置段落樣式(需提前定義或使用內置樣式)
para.setStyle("Heading1");

5.2 自定義樣式

// 創建字符樣式
CTSectPr sectPr = document.getDocument().getBody().addNewSectPr();
CTDocDefaults docDefaults = sectPr.addNewDocDefaults();
CTRPrDefault rPrDefault = docDefaults.addNewRPrDefault();
CTRPr rpr = rPrDefault.addNewRPr();
rpr.addNewB().setVal(STOnOff.TRUE);  // 默認加粗

6. 最佳實踐與注意事項

  1. 中文亂碼問題

    • 必須顯式設置中文字體(如 run.setFontFamily("宋體"))。
    • 確保系統或服務器環境支持中文字體。
  2. 性能優化

    • 生成大文檔時,使用 SXSSFWorkbook 類似的流式處理(但 POI 對 Word 的支持有限)。
    • 及時關閉資源:生成后調用 document.close() 釋放內存。
  3. 版本兼容性

    • Apache POI 5.x+ 支持 Office 2019+ 格式,舊版本需降級至 POI 3.x。
  4. 錯誤處理

    • 捕獲 IOExceptionInvalidFormatException
    • 使用 try-with-resources 確保流關閉:
      try (XWPFDocument doc = new XWPFDocument();FileOutputStream out = new FileOutputStream("output.docx")) {// 操作文檔
      }
      
  5. 模板引擎整合

    • 復雜文檔建議結合 FreemarkerVelocity 模板引擎,避免硬編碼樣式。

7. 常見問題解決

  • 表格邊框不顯示
    需顯式設置表格邊框屬性(POI 默認不顯示邊框)。

  • 生成的文檔損壞
    確保正確關閉 XWPFDocument 和輸出流。

  • 樣式不生效
    檢查樣式名稱是否正確,或直接通過 XWPFRun 設置樣式覆蓋。


通過掌握 XWPFDocument 的核心 API 和上述技巧,可以高效生成復雜的 Word 文檔,滿足企業級應用需求。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79106.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79106.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79106.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

crashpad 編譯

一環境配置 1.1設置系統UTF8編碼 1.2vs2017語言環境設置英文包 二.獲取depot_tools&#xff08;此步驟可以跳過 最新工具包已上傳下載使用即可&#xff09; windows下載壓縮包&#xff0c;然后放到系統PATH中 下載完以后&#xff0c;基本就是靠depot_tools這個工具集合了&am…

基于標注數據的情感分析模型研究

標題:基于標注數據的情感分析模型研究 內容:1.摘要 隨著互聯網的快速發展&#xff0c;大量文本數據蘊含著豐富的情感信息&#xff0c;對其進行情感分析具有重要的商業和社會價值。本研究的目的是構建基于標注數據的情感分析模型&#xff0c;以準確識別文本中的情感傾向。方法上…

【數據鏈路層深度解析】從幀結構到協議實現

目錄 一、數據鏈路層核心定位1.1 OSI模型中的位置1.2 三大核心職責 二、幀結構詳解2.1 以太網幀標準格式&#xff08;IEEE 802.3&#xff09;2.2 幀封裝代碼示例 三、核心協議機制3.1 MAC地址體系3.2 介質訪問控制CSMA/CD&#xff08;以太網沖突檢測&#xff09;現代交換機的演…

在若依前后端分離項目中集成 ONLYOFFICE 以實現在線預覽、編輯和協作功能

在若依前后端分離項目中集成 ONLYOFFICE 以實現在線預覽、編輯和協作功能 概述 ONLYOFFICE 是一款開源的在線文檔編輯套件&#xff0c;可實現文檔預覽、編輯、協作與轉換等功能&#xff0c;可通過 Docker 部署 DocumentServer 服務&#xff0c;并通過 HTTP API 或 WOPI 接口與…

SpringMVC 通過ajax 前后端數據交互

在前端的開發過程中&#xff0c;經常在html頁面通過ajax進行前后端數據的交互&#xff0c;SpringMVC的controller進行數據的接收&#xff0c;但是有的時候后端會出現數據無法接收到的情況&#xff0c;這個是因為我們的參數和前端ajax的contentType參數 類型不對應的情景&#x…

最新DeepSeek-Prover-V2-671B模型 簡介、下載、體驗、微調、數據集:專為數學定理自動證明設計的超大垂直領域語言模型(在線體驗地址)

DeepSeek-Prover-V2-671B模型 簡介、下載、體驗、微調、數據集&#xff1a;專為數學定理自動證明設計的超大垂直領域語言模型&#xff08;在線體驗地址&#xff09; 體驗地址&#xff1a;[Hugging Face 在線體驗]https://huggingface.co/playground?modelIddeepseek-ai/DeepS…

Kafka的Topic分區數如何合理設置?

一、分區數設置原則 1. 并發能力基準 分區數決定最大消費者并行度&#xff0c;建議設置為消費者組內消費者數量的整數倍 例如&#xff1a;消費者組有4個實例 → 分區數設為4/8/12等 這里定義的目的是為了讓消費者能均勻的分配到分區&#xff0c;避免打破負載均衡&#xff0c;…

章越科技賦能消防訓練體征監測與安全保障,從傳統模式到智能躍遷的實踐探索

引言&#xff1a;智能化轉型浪潮下&#xff0c;消防訓練的“破局”之需 2021年《“十四五”國家消防工作規劃》的出臺&#xff0c;標志著我國消防救援體系正式邁入“全災種、大應急”的全新階段。面對地震、洪澇、危化品泄漏等復雜救援場景&#xff0c;消防員不僅需要更強的體…

【數據庫原理及安全實驗】實驗五 數據庫備份與恢復

指導書原文 數據庫的備份與恢復SSMS 【實驗目的】 1) 熟悉并掌握利用界面操作進行數據庫備份和恢復的原理和操作。 【實驗原理】 1) 數據庫的恢復包括大容量日志恢復模式和簡單恢復模式。其中大容量日志恢復模式&#xff0c;簡單地說就是要對大容量操作進行最小日志記錄&a…

Linux 基礎IO(上)--文件與文件描述符fd

前言&#xff1a; 在生活里&#xff0c;我們常和各種文件打交道&#xff0c;像用 Word 寫文檔、用播放器看視頻&#xff0c;這些操作背后都離不開文件的輸入輸出&#xff08;I/O&#xff09;。在 Linux 系統中&#xff0c;文件 I/O 操作更是復雜且關鍵。 接下來我們將深入探討…

快速了解Go+rpc

更多個人筆記&#xff1a;&#xff08;僅供參考&#xff0c;非盈利&#xff09; gitee&#xff1a; https://gitee.com/harryhack/it_note github&#xff1a; https://github.com/ZHLOVEYY/IT_note 文章目錄 rpc基礎概念GO的rpc應用簡單編寫json編寫rpc rpc基礎概念 電商系統…

基于大模型的膀胱腫瘤全周期診療方案研究報告

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與方法 1.3 國內外研究現狀 二、大模型預測膀胱腫瘤的原理與技術基礎 2.1 大模型介紹 2.2 預測原理 2.3 技術支撐 三、術前風險預測與準備方案 3.1 腫瘤分期與惡性程度預測 3.2 患者身體狀況評估 3.3 術前準備工作 …

2025年4月個人工作生活總結

本文為 2025年4月工作生活總結。 研發編碼 一個項目的臨時記錄 自2月份領導讓我牽頭負責一個項目起&#xff0c;在本月算是有較多時間投入——但也是與之前的相比。 月初&#xff0c;清明節前一晚上&#xff0c;因某事務被叫上參加臨時緊急遠程會議&#xff0c;幾方領導都在…

Python爬蟲實戰:獲取軟科網最新特定專業大學排名數據并做分析,為高考填報志愿做參考

一、引言 在高考升學的重要階段,志愿填報成為考生和家長關注的核心問題。準確、全面且具有權威性的大學專業排名數據,是考生做出科學志愿決策的關鍵依據。軟科網作為專業的大學排名信息發布平臺,其發布的計算機科學與技術專業排名數據,因具有較高的公信力和參考價值,備受…

自學S32k144(18)————芯片鎖死問題及成功解鎖流程

1.鎖死原因 溫度過高flash異常操作靜電等電壓異常問題。。。。 本人出現情況&#xff1a;之前開發板不知什么原因&#xff0c;發生短路&#xff0c;重新置換芯片后&#xff0c;發現芯片在S32DS中無法正常燒錄 判斷可能是由于焊接時溫度過高導致鎖死。需解鎖芯片。 2.解決方法…

ISIS的由于L1產生的一系列問題

如果有些名詞不清晰可以查看之前文章 L1訪問其他區域使用缺省路由會引發次優路徑問題&#xff0c;但次優路徑leak路由又會引發路由環路問題&#xff0c;下面將會從去缺省路由到路由環路一一解決 Level 1的缺省路由 L1訪問其他區域使用缺省路由 --> 引發次優路徑 --> 引…

C++繼承(下)

目錄 一、繼承與友元 二、繼承與靜態成員 三、菱形繼承及菱形虛擬繼承 1. 繼承的方式 2. 菱形繼承的問題 3. 菱形虛擬繼承 4. 虛擬繼承解決數據冗余和二義性的原理 4.1 普通菱形繼承的內存布局 4.2 虛擬繼承的內存布局 四、繼承的總結和反思 1. 多繼承的復雜性 2.…

【漫話機器學習系列】233.激活閾(Threshold Activation)

深度學習入門&#xff1a;了解“閾值激活函數”&#xff08;Threshold Activation Function&#xff09; 激活函數是神經網絡中至關重要的一環。今天&#xff0c;我們通過一幅簡單直觀的手繪圖&#xff0c;一起理解最早期也最基礎的激活函數之一 —— 閾值激活函數&#xff08;…

(4)python中jupyter lab使用python虛擬環境

1. 先了解IPython和IPyKernel簡介 IPython 是一個功能強大的交互式 Python 解釋器和開發環境。它提供了一種增強的 Python Shell,使得用戶能夠以交互的方式探索、分析和可視化數據。IPython 的名稱來源于 "Interactive Python",體現了其交互式的特性。 IPyKernel 是…

nginx 配置要領

你提出的問題非常好&#xff01;確實在配置 WebSocket 代理時&#xff0c;proxy_pass 的 URL 處理需要特別注意。以下是關鍵解釋和修正建議&#xff1a; 1. 原配置的問題分析 location /ws/ {proxy_pass http://fastapi-container:8000; # 會保留 /ws/ 前綴傳遞給后端 }這種配…