最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用XWPFDocument生成word文檔的示例代碼

 更新時間:2025年12月08日 09:38:05   作者:codingPower  
XWPFDocument 是 Apache POI 庫中用于操作 .docx 格式 Word 文檔的核心類,本文將針對 XWPFDocument 進(jìn)行詳細(xì)解析,涵蓋其核心功能、常見用法及實際開發(fā)中的關(guān)鍵點

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

1. XWPFDocument 簡介

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

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

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

2. 核心結(jié)構(gòu)與類

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

3. 核心操作詳解

3.1 段落與文本

// 1. 加載模板(文件要在src/main/resources目錄下)
 ClassPathResource resource = new ClassPathResource("template/report_template.docx");
 XWPFDocument document = new XWPFDocument(resource.getInputStream());
        
// 創(chuàng)建段落
XWPFParagraph para = document.createParagraph();
para.setAlignment(ParagraphAlignment.CENTER);  // 對齊方式(居中)
para.setIndentationFirstLine(600);             // 首行縮進(jìn)(單位:TWIP)

// 添加文本片段
XWPFRun run = para.createRun();
run.setText("Hello World!");
run.setBold(true);                            // 加粗
run.setFontSize(14);                          // 字號
run.setFontFamily("宋體");                     // 解決中文亂碼的關(guān)鍵
run.setColor("FF0000");                       // 字體顏色(RGB 十六進(jìn)制)
run.addBreak();                               // 換行(類似 <br>)

3.2 表格操作

// 創(chuàng)建表格(3行3列)
XWPFTable table = document.createTable(3, 3);

// 設(shè)置列寬(單位: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("合并示例");

// 設(shè)置表格邊框
CTBorder border = CTBorder.Factory.newInstance();
border.setVal(STBorder.SINGLE);
border.setSz(BigInteger.valueOf(4));  // 邊框粗細(xì)
table.setTopBorder(border);           // 上邊框
table.setBottomBorder(border);        // 下邊框

3.3 列表與編號

// 創(chuàng)建編號列表
XWPFParagraph listPara = document.createParagraph();
listPara.setNumID(/* 編號ID,需通過樣式定義 */);
XWPFRun listRun = listPara.createRun();
listRun.setText("列表項1");

// 多級列表
CTAbstractNum abstractNum = CTAbstractNum.Factory.newInstance();
// ... 定義多級編號規(guī)則(需操作 XML 底層結(jié)構(gòu))

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 頁眉與頁腳

// 創(chuàng)建頁眉
XWPFHeader header = document.createHeader(HeaderFooterType.DEFAULT);
XWPFParagraph headerPara = header.createParagraph();
headerPara.createRun().setText("公司機(jī)密 - 第1頁");

// 創(chuàng)建頁腳(帶頁碼)
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("訪問示例網(wǎng)站");
linkRun.setUnderline(UnderlinePatterns.SINGLE);
linkRun.setColor("0000FF");

4.3 分頁符

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

5. 樣式與模板

5.1 使用預(yù)定義樣式

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

5.2 自定義樣式

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

6. 最佳實踐與注意事項

中文亂碼問題

  • 必須顯式設(shè)置中文字體(如 run.setFontFamily("宋體"))。
  • 確保系統(tǒng)或服務(wù)器環(huán)境支持中文字體。

性能優(yōu)化

  • 生成大文檔時,使用 SXSSFWorkbook 類似的流式處理(但 POI 對 Word 的支持有限)。
  • 及時關(guān)閉資源:生成后調(diào)用 document.close() 釋放內(nèi)存。

版本兼容性

Apache POI 5.x+ 支持 Office 2019+ 格式,舊版本需降級至 POI 3.x。

錯誤處理

  • 捕獲 IOExceptionInvalidFormatException。
  • 使用 try-with-resources 確保流關(guān)閉:
try (XWPFDocument doc = new XWPFDocument();
     FileOutputStream out = new FileOutputStream("output.docx")) {
    // 操作文檔
}

模板引擎整合

復(fù)雜文檔建議結(jié)合 FreemarkerVelocity 模板引擎,避免硬編碼樣式。

7. 常見問題解決

  • 表格邊框不顯示:需顯式設(shè)置表格邊框?qū)傩裕≒OI 默認(rèn)不顯示邊框)。
  • 生成的文檔損壞:確保正確關(guān)閉 XWPFDocument 和輸出流。
  • 樣式不生效:檢查樣式名稱是否正確,或直接通過 XWPFRun 設(shè)置樣式覆蓋。

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

到此這篇關(guān)于Java使用XWPFDocument生成word文檔的示例代碼的文章就介紹到這了,更多相關(guān)Java XWPFDocument生成word內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot3.X 無法解析parameter參數(shù)問題分析

    springboot3.X 無法解析parameter參數(shù)問題分析

    本文介紹了Spring Boot 3.2.1版本中調(diào)用接口時出現(xiàn)的參數(shù)解析問題,該錯誤是由Spring新版本加強的錯誤校驗和報錯提示導(dǎo)致的,在Spring 6.1之后,官方要求URL中的傳參必須使用`@PathVariable`聲明用于接收的變量,而不能省略`@RequestParam`注解,感興趣的朋友一起看看吧
    2025-03-03
  • 一文詳解Spring中ResponseEntity包裝器的使用

    一文詳解Spring中ResponseEntity包裝器的使用

    在?Spring?中,ResponseEntity?是?HTTP?響應(yīng)的包裝器,這篇文章主要為大家詳細(xì)介紹了ResponseEntity包裝器的使用,感興趣的可以了解一下
    2025-02-02
  • SpringBoot日期格式轉(zhuǎn)換之配置全局日期格式轉(zhuǎn)換器的實例詳解

    SpringBoot日期格式轉(zhuǎn)換之配置全局日期格式轉(zhuǎn)換器的實例詳解

    這篇文章主要介紹了SpringBoot日期格式轉(zhuǎn)換之配置全局日期格式轉(zhuǎn)換器的實例詳解,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Mybatis-plus實現(xiàn)join連表查詢的示例代碼

    Mybatis-plus實現(xiàn)join連表查詢的示例代碼

    mybatis-plus在連表查詢上是不行的,如果需要連表查詢,就得乖乖的去寫xml文件了,本文介紹了mybatis-plus-join框架,它支持連表查詢,感興趣的可以了解一下
    2023-08-08
  • Struts2 Result 返回JSON對象詳解

    Struts2 Result 返回JSON對象詳解

    這篇文章主要講解Struts2返回JSON對象的兩種方式,講的比較詳細(xì),希望能給大家做一個參考。
    2016-06-06
  • SpringBoot中定時任務(wù)@Scheduled注解的使用解讀

    SpringBoot中定時任務(wù)@Scheduled注解的使用解讀

    這篇文章主要介紹了SpringBoot中定時任務(wù)@Scheduled注解的使用解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • SpringCloud搭建Eureka服務(wù)模塊的過程

    SpringCloud搭建Eureka服務(wù)模塊的過程

    Eureka在分布式系統(tǒng)中起到了連接各個微服務(wù)的紐帶作用,使得服務(wù)之間的交互變得更加靈活、可靠,本文將深入探討如何使用Spring?Cloud,逐步引導(dǎo)讀者完成Eureka服務(wù)模塊的搭建,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • 一文詳解Spring是怎樣處理循環(huán)依賴的

    一文詳解Spring是怎樣處理循環(huán)依賴的

    循環(huán)依賴簡單理解就是A,B 兩個bean相互依賴,A依賴B,B依賴A,A->B、B->A大概就是這樣,這篇文章主要介紹了Spring是怎樣處理循環(huán)依賴的,文中通過代碼示例給大家介紹的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下
    2024-01-01
  • 在IntelliJ IDEA中.idea文件是什么可以刪除嗎

    在IntelliJ IDEA中.idea文件是什么可以刪除嗎

    相信有很多小伙伴,在用idea寫java代碼的時候,創(chuàng)建工程總是會出現(xiàn).idea文件,該文件也從來沒去打開使用過,那么它在我們項目里面,扮演什么角色,到底能不能刪除它呢?這篇文章主要介紹了在IntelliJ IDEA中.idea文件是什么可以刪除嗎,需要的朋友可以參考下
    2024-01-01
  • 基于Java的電梯系統(tǒng)實現(xiàn)過程

    基于Java的電梯系統(tǒng)實現(xiàn)過程

    這篇文章主要介紹了基于Java的電梯系統(tǒng)實現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10

最新評論

临西县| 邵阳县| 泌阳县| 南宁市| 祁连县| 若羌县| 普安县| 凤台县| 大竹县| 凤台县| 饶平县| 溧阳市| 章丘市| 高陵县| 德安县| 茶陵县| 西贡区| 宝山区| 大足县| 彭阳县| 嘉祥县| 筠连县| 东丰县| 迁安市| 深水埗区| 梓潼县| 湾仔区| 三台县| 保康县| 龙山县| 峡江县| 偏关县| 乐业县| 辉南县| 清镇市| 万荣县| 张家界市| 澳门| 西昌市| 北碚区| 鄂尔多斯市|