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

Java使用Spire.Doc for Java實(shí)現(xiàn)從零生成Word文檔

 更新時(shí)間:2026年05月06日 11:33:01   作者:缺點(diǎn)內(nèi)向  
在日常的企業(yè)級(jí)開發(fā)中,報(bào)表生成、合同自動(dòng)化和數(shù)據(jù)導(dǎo)出等場景,經(jīng)常需要處理 Word 文檔,本文以 Spire.Doc for Java 為例,從配置環(huán)境開始為大家詳細(xì)介紹一下如何逐步實(shí)現(xiàn)一個(gè)包含文本、圖片和表格的標(biāo)準(zhǔn) Word 文檔

在日常的企業(yè)級(jí)開發(fā)中,報(bào)表生成、合同自動(dòng)化和數(shù)據(jù)導(dǎo)出等場景,經(jīng)常需要處理 Word 文檔。在 Java 生態(tài)中,除了 Apache POI 之外,也有一些商業(yè)或免費(fèi)的組件可供選擇,它們不依賴本地 Office 環(huán)境即可完成文檔的創(chuàng)建與讀寫。

本文以 Spire.Doc for Java 為例,從配置環(huán)境開始,逐步實(shí)現(xiàn)一個(gè)包含文本、圖片和表格的標(biāo)準(zhǔn) Word 文檔。

1. 環(huán)境準(zhǔn)備

開始之前,請(qǐng)確認(rèn)開發(fā)環(huán)境滿足以下條件:

  • JDK 1.8 及以上版本
  • Maven 項(xiàng)目環(huán)境(本文以 Maven 為例,也可手動(dòng)導(dǎo)入 Jar 包)
  • 開發(fā)工具:IDEA 或 Eclipse

2. 項(xiàng)目依賴配置

在項(xiàng)目的 pom.xml 中添加倉庫和依賴。國內(nèi)用戶可使用鏡像倉庫以加快下載速度:

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.doc</artifactId>
        <version>14.4.9</version>
    </dependency>
</dependencies>

補(bǔ)充說明

  • 如果不使用 Maven,可以手動(dòng)下載 Jar 包并添加到項(xiàng)目的構(gòu)建路徑中。
  • 該組件的免費(fèi)版存在一些限制,例如最多處理 500 個(gè)段落或 25 個(gè)表格,轉(zhuǎn)換 PDF 時(shí)也有頁數(shù)限制。生成超長文檔時(shí),需注意這些約束。

3. 核心對(duì)象模型

Spire.Doc for Java 的對(duì)象結(jié)構(gòu)與 Word 文檔的物理層級(jí)基本一致:

  • Document:對(duì)應(yīng)一個(gè)完整的 Word 文檔文件。
  • Section:對(duì)應(yīng)文檔中的“節(jié)”,用于區(qū)分不同的頁面布局。
  • Paragraph:對(duì)應(yīng)段落,是容納文本的主要容器。
  • TextRange:段落中的一段連續(xù)文本,用于控制局部格式(如加粗、顏色)。

理解這四層關(guān)系后,代碼的組織會(huì)相對(duì)清晰。

4. 代碼實(shí)現(xiàn):從零創(chuàng)建復(fù)雜文檔

下面逐步編寫一個(gè)示例,生成一份包含標(biāo)題、作者信息、正文、圖片和表格的工作報(bào)告。

4.1 創(chuàng)建文檔與頁面設(shè)置

首先創(chuàng)建 DocumentSection 對(duì)象,并調(diào)整頁面邊距。

import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.DocPicture;
import java.awt.*;

public class CreateWordDemo {
    public static void main(String[] args) {
        // 創(chuàng)建文檔實(shí)例
        Document document = new Document();
        
        // 添加一個(gè)節(jié)
        Section section = document.addSection();
        
        // 設(shè)置頁面邊距(上下左右各 2.5 厘米)
        section.getPageSetup().getMargins().setAll(2.5);
        
        // 后續(xù)代碼繼續(xù)追加...
    }
}

4.2 添加標(biāo)題與作者信息

標(biāo)題通常需要居中且加粗,作者信息可以設(shè)置為斜體或灰色。

// 添加主標(biāo)題
Paragraph titlePara = section.addParagraph();
titlePara.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
TextRange titleText = titlePara.appendText("Java 自動(dòng)化辦公技術(shù)報(bào)告");
titleText.getCharacterFormat().setBold(true);
titleText.getCharacterFormat().setFontName("微軟雅黑");
titleText.getCharacterFormat().setFontSize(22);

// 添加作者段落
Paragraph authorPara = section.addParagraph();
authorPara.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
TextRange authorText = authorPara.appendText("作者:稀土掘金開發(fā)者 | 日期:2026-05-06");
authorText.getCharacterFormat().setItalic(true);
authorText.getCharacterFormat().setFontSize(12);
authorText.getCharacterFormat().setTextColor(Color.GRAY);

// 添加一個(gè)空行作為間距
section.addParagraph();

4.3 添加正文段落

正文需要設(shè)置首行縮進(jìn),以符合中文排版習(xí)慣。

// 添加正文段落
Paragraph contentPara = section.addParagraph();
String text = "本文演示了使用 Java 組件生成 Word 文檔的基本流程。"
                + "該方法不依賴于本地安裝的 Office 軟件,可部署在 Linux 服務(wù)器上運(yùn)行。"
                + "下面展示一個(gè)示例圖片與進(jìn)度表格。";
contentPara.appendText(text);
contentPara.getFormat().setFirstLineIndent(24); // 首行縮進(jìn)24字符

4.4 插入圖片

插入圖片時(shí),可以指定寬度和高度進(jìn)行縮放。

// 插入圖片段落
Paragraph imagePara = section.addParagraph();
imagePara.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);

// 請(qǐng)將實(shí)際圖片路徑替換為你本地的文件
DocPicture picture = imagePara.appendPicture("C:\\temp\\sample_image.png");
picture.setWidth(300);
picture.setHeight(200);

4.5 添加表格

表格操作中,需要注意表頭的樣式設(shè)置,以及避免重復(fù)添加段落。下面創(chuàng)建一個(gè) 3 行 3 列的表格,并填充示例數(shù)據(jù)。

// 表格標(biāo)題
Paragraph tableTitlePara = section.addParagraph();
tableTitlePara.appendText("項(xiàng)目進(jìn)度清單:");
tableTitlePara.getFormat().setBold(true);

// 創(chuàng)建表格 (指定 3 行, 3 列)
Table table = section.addTable(true);
table.resetCells(3, 3);

// 設(shè)置表格寬度
table.setWidth(500, TableWidthType.Point);
table.getTableFormat().setCollapseBorders(true);

// ----- 設(shè)置表頭(第 1 行)-----
TableRow headerRow = table.getRows().get(0);
// 清空單元格默認(rèn)占用的空白段落,避免重復(fù)
for (int i = 0; i < 3; i++) {
    headerRow.getCells().get(i).getParagraphs().clear();
}

String[] headers = {"模塊名稱", "進(jìn)度", "負(fù)責(zé)人"};
for (int i = 0; i < headers.length; i++) {
    Paragraph p = headerRow.getCells().get(i).addParagraph();
    p.appendText(headers[i]);
    p.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
    p.getItems().get(0).getCharacterFormat().setBold(true);
    headerRow.getCells().get(i).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
}

// ----- 第 2 行數(shù)據(jù) -----
TableRow row2 = table.getRows().get(1);
row2.getCells().get(0).getParagraphs().clear();
row2.getCells().get(1).getParagraphs().clear();
row2.getCells().get(2).getParagraphs().clear();
row2.getCells().get(0).addParagraph().appendText("需求分析");
row2.getCells().get(1).addParagraph().appendText("已完成 100%");
row2.getCells().get(2).addParagraph().appendText("張三");

// ----- 第 3 行數(shù)據(jù) -----
TableRow row3 = table.getRows().get(2);
row3.getCells().get(0).getParagraphs().clear();
row3.getCells().get(1).getParagraphs().clear();
row3.getCells().get(2).getParagraphs().clear();
row3.getCells().get(0).addParagraph().appendText("后端開發(fā)");
row3.getCells().get(1).addParagraph().appendText("進(jìn)行中 70%");
row3.getCells().get(2).addParagraph().appendText("李四");

注意:addTable(true) 會(huì)自動(dòng)為每個(gè)單元格創(chuàng)建一個(gè)空白段落,因此寫入數(shù)據(jù)前先調(diào)用 clear() 是一個(gè)較為穩(wěn)妥的做法,可以避免內(nèi)容重復(fù)。

4.6 保存文檔

最后將文檔寫入磁盤,并釋放資源。

// 保存文檔
String outputPath = "output/created_demo.docx";
try {
    document.saveToFile(outputPath, FileFormat.Docx);
    System.out.println("文檔生成成功,路徑:" + outputPath);
} catch (Exception e) {
    e.printStackTrace();
} finally {
    document.dispose();
}

5. 運(yùn)行結(jié)果

執(zhí)行 main 方法后,會(huì)在項(xiàng)目根目錄的 output 文件夾中生成 created_demo.docx 文件。打開后可以看到:

  • 居中對(duì)齊的大標(biāo)題和灰色的作者信息
  • 帶首行縮進(jìn)的正文描述
  • 按指定大小顯示的圖片
  • 包含表頭和數(shù)據(jù)的表格

6. 補(bǔ)充說明

實(shí)際開發(fā)中可能遇到以下幾個(gè)情況:

  • 中文字體支持:如果部署在 Linux 服務(wù)器上,需確保操作系統(tǒng)已安裝中文字體(如宋體或微軟雅黑),否則生成的文檔中可能出現(xiàn)方框或亂碼。
  • 內(nèi)存占用:處理超過 20 兆的大文檔時(shí),該組件的內(nèi)存占用會(huì)有所增加。建議在生成大文件后及時(shí)調(diào)用 dispose() 釋放資源。
  • 版本差異:不同版本的部分方法參數(shù)可能有調(diào)整。若遇到編譯錯(cuò)誤,可參考對(duì)應(yīng)版本的 API 文檔進(jìn)行調(diào)整。

通過上述步驟,可以在不依賴本地 Office 軟件的前提下,使用 Java 完成 Word 文檔的創(chuàng)建與內(nèi)容填充。這一思路適用于報(bào)表生成、合同批量處理等自動(dòng)化場景。

到此這篇關(guān)于Java使用Spire.Doc for Java實(shí)現(xiàn)從零生成Word文檔的文章就介紹到這了,更多相關(guān)Java生成Word文檔內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文掌握J(rèn)ava 數(shù)據(jù)結(jié)構(gòu)超詳細(xì)筆記(收藏版)

    一文掌握J(rèn)ava 數(shù)據(jù)結(jié)構(gòu)超詳細(xì)筆記(收藏版)

    本文給大家介紹Java數(shù)據(jù)結(jié)構(gòu),包括數(shù)組、鏈表、List、Set、Map及迭代器,對(duì)比了其內(nèi)存特性、操作效率和應(yīng)用場景,并介紹了哈希及沖突解決方法,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • 一定要讓你搞懂Java位運(yùn)算符

    一定要讓你搞懂Java位運(yùn)算符

    這篇文章主要為大家介紹了Java位運(yùn)算符,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 如何解決Nacos服務(wù)下線報(bào)錯(cuò)問題

    如何解決Nacos服務(wù)下線報(bào)錯(cuò)問題

    這篇文章主要介紹了如何解決Nacos服務(wù)下線報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java編程細(xì)節(jié)重構(gòu)之為什么if-else不是好代碼詳析

    Java編程細(xì)節(jié)重構(gòu)之為什么if-else不是好代碼詳析

    這篇文章主要給大家介紹了關(guān)于Java編程細(xì)節(jié)重構(gòu)之為什么if-else不是好代碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)些學(xué)習(xí)吧
    2018-09-09
  • Java8 Instant時(shí)間戳使用小記

    Java8 Instant時(shí)間戳使用小記

    這篇文章主要給大家介紹了關(guān)于Java8 Instant時(shí)間戳使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • SpringBoot中項(xiàng)目結(jié)構(gòu)的項(xiàng)目實(shí)踐

    SpringBoot中項(xiàng)目結(jié)構(gòu)的項(xiàng)目實(shí)踐

    SpringBoot項(xiàng)目結(jié)構(gòu)遵循Maven或Gradle的標(biāo)準(zhǔn)目錄結(jié)構(gòu),融入了SpringBoot的特定約定,本文就來介紹一下SpringBoot中項(xiàng)目結(jié)構(gòu)的項(xiàng)目,感興趣的可以了解一下
    2025-03-03
  • SpringBoot項(xiàng)目解決跨域的5種實(shí)現(xiàn)過程

    SpringBoot項(xiàng)目解決跨域的5種實(shí)現(xiàn)過程

    本文介紹了SpringBoot項(xiàng)目中解決跨域問題的5種方式,包括使用@CrossOrigin注解、全局配置WebMvcConfigurer、使用CorsFilter過濾器、WebFlux配置和手動(dòng)配置過濾器,推薦使用全局配置WebMvcConfigurer,因?yàn)樗冉y(tǒng)一又靈活,適合大多數(shù)項(xiàng)目場景
    2026-05-05
  • 如何在SpringBoot中使用logback優(yōu)化異常堆棧的輸出詳解

    如何在SpringBoot中使用logback優(yōu)化異常堆棧的輸出詳解

    最近項(xiàng)目中整合了logback,所以下面這篇文章主要給大家介紹了關(guān)于如何在SpringBoot中使用logback優(yōu)化異常堆棧的輸出,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Maven 多profile及指定編譯問題的解決

    Maven 多profile及指定編譯問題的解決

    這篇文章主要介紹了Maven 多profile及指定編譯問題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Springboot-Management的項(xiàng)目實(shí)踐

    Springboot-Management的項(xiàng)目實(shí)踐

    本文主要介紹了Springboot-Management的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05

最新評(píng)論

南召县| 东阳市| 南华县| 竹溪县| 多伦县| 怀安县| 黄山市| 芜湖市| 土默特右旗| 宁蒗| 花莲县| 永登县| 桦川县| 洛浦县| 汾阳市| 阳春市| 平湖市| 吉林省| 拜泉县| 康乐县| 汕尾市| 浦北县| 保德县| 和硕县| 施甸县| 中阳县| 安丘市| 江华| 德令哈市| 和顺县| 保康县| 南江县| 凌源市| 靖安县| 云林县| 黔江区| 竹北市| 阳谷县| 卫辉市| 石屏县| 布尔津县|