欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot集成Poi-tl實(shí)現(xiàn)動(dòng)態(tài)Word文檔生成的詳細(xì)步驟

 更新時(shí)間:2025年07月03日 08:52:47   作者:@程序員小袁  
在項(xiàng)目開發(fā)過程中,遇到了一個(gè)需求:將用戶輸入的數(shù)據(jù)填充到給定格式的?Word?文檔中,簡(jiǎn)單來說,就是要根據(jù)預(yù)定義的模板生成一個(gè)新的?Word?文檔,并自動(dòng)填充數(shù)據(jù),所以本文給大家介紹了SpringBoot集成Poi-tl實(shí)現(xiàn)動(dòng)態(tài)Word文檔生成的詳細(xì)步驟,需要的朋友可以參考下

前言

在項(xiàng)目開發(fā)過程中,遇到了一個(gè)需求:將用戶輸入的數(shù)據(jù)填充到給定格式的 Word 文檔中。簡(jiǎn)單來說,就是要根據(jù)預(yù)定義的模板生成一個(gè)新的 Word 文檔,并自動(dòng)填充數(shù)據(jù)。

什么是 Poi-tl?

官網(wǎng):http://deepoove.com/poi-tl/

poi-tl(Poi Template Language)是一個(gè)強(qiáng)大的 Word 模板引擎,能夠根據(jù) Word 模板和數(shù)據(jù)動(dòng)態(tài)生成新的文檔。底層是基于 Apache POI 實(shí)現(xiàn)的。

Apache POI 提供了簡(jiǎn)便的 API 來操作各種 Word 文檔元素(如文本、圖片、表格、頁眉、頁腳、圖表等),并允許直接操作文檔的 XML 結(jié)構(gòu)。

Poi-tl 的功能特點(diǎn):

功能描述
文本渲染渲染模板中的文本標(biāo)簽
圖片渲染渲染模板中的圖片標(biāo)簽
表格渲染渲染模板中的表格標(biāo)簽
列表渲染渲染模板中的列表標(biāo)簽
圖表渲染渲染不同類型的圖表,包括柱狀圖、折線圖等
條件渲染根據(jù)條件顯示或隱藏內(nèi)容
循環(huán)渲染對(duì)文本、圖片、表格等內(nèi)容進(jìn)行循環(huán)渲染
表格行/列循環(huán)對(duì)表格的行或列進(jìn)行循環(huán)渲染
圖片替換替換文檔中的指定圖片
超鏈接、書簽、錨點(diǎn)支持文檔內(nèi)的超鏈接、書簽、錨點(diǎn)等功能
強(qiáng)大的表達(dá)式支持完全支持 SpringEL 表達(dá)式,并可擴(kuò)展至 OGNL、MVEL 等表達(dá)式
自定義標(biāo)簽支持支持自定義標(biāo)簽前后綴
文本框支持支持文本框中的標(biāo)簽
樣式自定義自定義模板樣式,同時(shí)代碼中也可動(dòng)態(tài)設(shè)置樣式
模板嵌套支持嵌套模板功能
Word 合并支持 Word 中的合并操作
自定義函數(shù)(插件)允許在模板中使用自定義函數(shù)

通過這些特性,我們可以輕松地實(shí)現(xiàn)模板渲染,生成符合特定格式要求的文檔。

如何使用 Poi-tl?

本文以 Spring Boot 項(xiàng)目為例,展示如何集成 Poi-tl 進(jìn)行模板渲染。小伙伴們可以按照步驟一起實(shí)踐!

1. 創(chuàng)建 Spring Boot 項(xiàng)目

首先,創(chuàng)建一個(gè) Spring Boot 項(xiàng)目,版本為 2.2.1(可以根據(jù)需要調(diào)整版本)。在 pom.xml 文件中引入以下依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

2. 添加 Poi-tl 依賴

接下來,向 pom.xml 中添加 Poi-tl 的依賴:

<dependency>
    <groupId>com.deepoove</groupId>
    <artifactId>poi-tl</artifactId>
    <version>1.9.1</version>
</dependency>

3. 準(zhǔn)備 Word 模板

我們需要準(zhǔn)備一個(gè) Word 模板??梢允謩?dòng)創(chuàng)建一個(gè) Word 文件,這里我們以 Hello World.docx 為例,模板內(nèi)容如下:

模板示例

我們將模板存放在 resources 目錄下,并定義幾個(gè)占位符,例如:{{title}}、{{text}}{{author}} 等。

4. 渲染模板并生成新文檔

我們可以通過 XWPFTemplate 來渲染模板,將數(shù)據(jù)填充到模板中并生成新的文檔。示例代碼如下:

@SpringBootTest
public class PoiTlApplicationTest {
    @Test
    public void test() {
        // 獲取 Word 模板路徑
        String filepath = this.getClass().getClassLoader().getResource("hello-world.docx").getPath();

        // 渲染數(shù)據(jù)
        XWPFTemplate template = XWPFTemplate.compile(filepath).render(
            new HashMap<String, Object>() {{
                put("title", "Hello, poi-tl Word模板引擎");
                put("text", "Hello World");
            }}
        );

        // 輸出新文檔
        try {
            template.writeAndClose(new FileOutputStream("output.docx"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

執(zhí)行上述單元測(cè)試后,新的文檔 output.docx 將會(huì)生成,并且內(nèi)容將如預(yù)期渲染。

相關(guān)概念

模板

模板是一個(gè) .docx 格式的文件,通常通過 Microsoft Word 或 WPS Office 創(chuàng)建。在模板中,我們使用占位符來標(biāo)識(shí)需要?jiǎng)討B(tài)渲染的內(nèi)容。

標(biāo)簽

Poi-tl 使用標(biāo)簽來標(biāo)識(shí)占位符,所有標(biāo)簽都以 {{ 開頭,}} 結(jié)尾。標(biāo)簽可以出現(xiàn)在 Word 文檔的任何位置,包括頁眉、頁腳、表格內(nèi)部、文本框等。

數(shù)據(jù)模型

數(shù)據(jù)模型是將渲染數(shù)據(jù)傳遞給模板的方式,通常使用 Map 或 Java 對(duì)象。我們可以選擇通過哈希表或?qū)ο髞韨鬟f數(shù)據(jù)。

  1. 哈希表(key 為標(biāo)簽名)
Map<String, Object> data = new HashMap<>();
data.put("title", "Hello, poi-tl Word模板引擎");
data.put("text", "Hello World");
data.put("author", "god23bin");
data.put("description", "這還不關(guān)注 god23bin?再不關(guān)注我可要求你關(guān)注了!");
  1. Java 對(duì)象(屬性為標(biāo)簽名)
public class DataModel {
    private String title;
    private String text;
    private String author;
    private String description;
    // 省略 getter 和 setter
}

DataModel data = new DataModel();
data.setTitle("Hello, poi-tl Word模板引擎");
data.setText("Hello World");
data.setAuthor("god23bin");
data.setDescription("這還不關(guān)注 god23bin?再不關(guān)注我可要求你關(guān)注了!");

標(biāo)簽寫法

Poi-tl 支持多種標(biāo)簽類型,常見的標(biāo)簽包括文本、圖片、表格、列表等:

  • 文本標(biāo)簽{{var}}
  • 圖片標(biāo)簽{{@var}}
  • 表格標(biāo)簽{{#var}}
  • 列表標(biāo)簽{{*var}}

插件

Poi-tl 支持插件機(jī)制,插件允許我們?cè)谀0逯袌?zhí)行自定義的邏輯。例如,我們可以將 HTML 渲染插件綁定到某個(gè)標(biāo)簽上,使其支持 HTML 內(nèi)容渲染。

Configure configure = Configure.builder().bind("description", new HtmlRenderPolicy()).build();

表格行循環(huán)

如果需要在 Word 文檔中渲染多行表格數(shù)據(jù),可以使用 HackLoopTableRenderPolicy 插件來循環(huán)渲染表格的行。

@Test
public void rowLoopTest() {
    AcWordModel data = getFromDB();  // 假設(shè)從數(shù)據(jù)庫獲取數(shù)據(jù)
    String filepath = this.getClass().getClassLoader().getResource("table-row-loop.docx").getPath();
    Configure configure = Configure.builder()
        .bind("articles", new HackLoopTableRenderPolicy())
        .bind("columns", new HackLoopTableRenderPolicy())
        .build();
    XWPFTemplate template = XWPFTemplate.compile(filepath, configure).render(data);
    try {
        template.writeAndClose(new FileOutputStream("ac-word.docx"));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

封裝工具類

為了方便調(diào)用,我們可以封裝一個(gè)工具類來處理 Word 渲染:

public class WordUtil {
    public static void generateWordFile(String templatePath, String targetPath, Map<String, Object> data) {
        XWPFTemplate template = XWPFTemplate.compile(templatePath).render(data);
        try {
            template.writeAndClose(new FileOutputStream(targetPath));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

總結(jié)

通過 Poi-tl,我們可以輕松實(shí)現(xiàn)基于模板的文檔渲染。無論是簡(jiǎn)單的文本填充,還是復(fù)雜的表格、圖表渲染,都能輕松應(yīng)對(duì)。希望這篇教程能幫助大家更好地使用 Poi-tl 進(jìn)行文檔自動(dòng)化生成!

以上就是SpringBoot集成Poi-tl實(shí)現(xiàn)動(dòng)態(tài)Word文檔生成的詳細(xì)步驟的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Poi-tl動(dòng)態(tài)Word文檔生成的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java繼承的問題引導(dǎo)和測(cè)試代碼

    Java繼承的問題引導(dǎo)和測(cè)試代碼

    這篇文章主要介紹了Java繼承的問題引導(dǎo)和測(cè)試代碼,涉及繼承的概念,合成的語法等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2021-08-08
  • 三分鐘快速掌握J(rèn)ava中枚舉(enum)

    三分鐘快速掌握J(rèn)ava中枚舉(enum)

    enum的全稱為enumeration, 是 JDK 1.5中引入的新特性,存放在 java.lang包中。下面這篇文章是我在使用enum過程中的一些經(jīng)驗(yàn)和總結(jié),分享出來方便大家快速的掌握J(rèn)ava中枚舉(enum),有需要的朋友們下面跟著小編來一起看看吧。
    2016-12-12
  • 解決spring-boot-maven-plugin報(bào)紅的問題

    解決spring-boot-maven-plugin報(bào)紅的問題

    這篇文章主要給大家介紹一下如何解決spring-boot-maven-plugin報(bào)紅的問題,文中通過圖文講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Android圖片轉(zhuǎn)換器代碼分享

    Android圖片轉(zhuǎn)換器代碼分享

    本文給大家總結(jié)了下在安卓程序中進(jìn)行圖片轉(zhuǎn)換的方法,非常的實(shí)用,小伙伴們可以參考下。
    2015-10-10
  • 關(guān)于Spring Boot動(dòng)態(tài)權(quán)限變更問題的實(shí)現(xiàn)方案

    關(guān)于Spring Boot動(dòng)態(tài)權(quán)限變更問題的實(shí)現(xiàn)方案

    這篇文章主要介紹了Spring Boot動(dòng)態(tài)權(quán)限變更實(shí)現(xiàn)的整體方案使用session作為緩存,結(jié)合AOP技術(shù)進(jìn)行token認(rèn)證和權(quán)限控制,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-06-06
  • java在linux本地執(zhí)行shell命令的實(shí)現(xiàn)方法

    java在linux本地執(zhí)行shell命令的實(shí)現(xiàn)方法

    本文主要介紹了java在linux本地執(zhí)行shell命令的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • SpringBoot打印Banner的實(shí)現(xiàn)示例

    SpringBoot打印Banner的實(shí)現(xiàn)示例

    本文主要介紹了SpringBoot啟動(dòng)Banner的實(shí)現(xiàn)原理和打印流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • java跳出多重循環(huán)的三種實(shí)現(xiàn)方式

    java跳出多重循環(huán)的三種實(shí)現(xiàn)方式

    文章主要介紹了Java中跳出多重循環(huán)的三種方式:使用`break`配合標(biāo)簽、在布爾表達(dá)式中添加判斷變量、以及使用`try-catch`制造異常,每種方式都有具體的代碼示例,并輸出了相應(yīng)的執(zhí)行結(jié)果
    2025-01-01
  • Java不指定長度的二維數(shù)組實(shí)例

    Java不指定長度的二維數(shù)組實(shí)例

    今天小編就為大家分享一篇Java不指定長度的二維數(shù)組實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • java?class?name實(shí)例深入精講

    java?class?name實(shí)例深入精講

    這篇文章主要為大家介紹了java?class?name實(shí)例深入精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09

最新評(píng)論