Java中使用poi+poi-tl實現根據模板導出word文檔

場景

若依管理系統前后端分離版基于ElementUI和SpringBoot怎樣實現Excel導入和導出:

若依管理系統前后端分離版基于ElementUI和SpringBoot怎樣實現Excel導入和導出_若依導出前端獲得到后端的execl流之后怎么操作-CSDN博客

上面講的是Excel的導出,如果是需要根據word文檔的模板,比如根據數據庫中數據或者其它數據源循環

根據模板填充數據,可填充文字、圖片、表格、圖表等數據。

poi-tl

poi-tl(poi template language)是Word模板引擎,使用Word模板和數據創建很棒的Word文檔。

poi-tl是一款采用Apache License 2.0開源協議的開源產品

poi-tl的github地址:

GitHub - Sayi/poi-tl: Generate awesome word(docx) with template

poi-tl技術文檔地址:

Poi-tl Documentation

為什么使用poi-tl

poi-tl模板引擎功能

Word模板引擎功能描述

?文本

將標簽渲染為文本

?圖片

將標簽渲染為圖片

?表格

將標簽渲染為表格

?列表

將標簽渲染為列表

?圖表

條形圖(3D條形圖)、柱形圖(3D柱形圖)、面積圖(3D面積圖)、折線圖(3D折線圖)、雷達圖、餅圖(3D餅圖)、散點圖等圖表渲染

?If Condition判斷

根據條件隱藏或者顯示某些文檔內容(包括文本、段落、圖片、表格、列表、圖表等)

?Foreach Loop循環

根據集合循環某些文檔內容(包括文本、段落、圖片、表格、列表、圖表等)

?Loop表格行

循環復制渲染表格的某一行

?Loop表格列

循環復制渲染表格的某一列

?Loop有序列表

支持有序列表的循環,同時支持多級列表

?Highlight代碼高亮

word中代碼塊高亮展示,支持26種語言和上百種著色樣式

?Markdown

將Markdown渲染為word文檔

?Word批注

完整的批注功能,創建批注、修改批注等

?Word附件

Word中插入附件

?SDT內容控件

內容控件內標簽支持

?Textbox文本框

文本框內標簽支持

?圖片替換

將原有圖片替換成另一張圖片

?書簽、錨點、超鏈接

支持設置書簽,文檔內錨點和超鏈接功能

?Expression Language

完全支持SpringEL表達式,可以擴展更多的表達式:OGNL, MVEL…?

?樣式

模板即樣式,同時代碼也可以設置樣式

?模板嵌套

模板包含子模板,子模板再包含子模板

?合并

Word合并Merge,也可以在指定位置進行合并

?用戶自定義函數(插件)

插件化設計,在文檔任何位置執行函數

注:

博客:
霸道流氓氣質-CSDN博客

實現

1、快速開始

注意這里poi-tl與poi的對應關系

當前poi-tl的最新版本為1.12.2,需要對應poi的版本5.2.2+

如果poi不是用的該版本,則找對應版本的對應關系。

比如這里使用的poi版本為

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

則需要引入對應的poi-tl的版本為1.8.2

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

相應的文檔地址

Poi-tl Documentation

2、新建模板文件,以docx后綴結尾

并在模板文件中需要顯示內容的位置,添加標簽

{{title}}

文本標簽測試

新建渲染方法

??? public static void render(Map<String, Object> map){XWPFTemplate template = XWPFTemplate.compile("D://test//temp.docx").render(map);try {FileOutputStream out = new FileOutputStream("D://test//output.docx");template.write(out);out.flush();out.close();template.close();} catch (IOException e) {e.printStackTrace();}}

其中temp.docx是模板文件,oupput.docx是輸出的文件

調用渲染方法

??????? render(new HashMap<String, Object>(){{put("title", "Hi, poi-tl Word模板引擎");}});

運行結果

3、文本標簽復雜屬性

數據模型

String :文本

TextRenderData :有樣式的文本

HyperLinkTextRenderData :超鏈接文本

Object :調用 toString() 方法轉化為文本

示例代碼

?HashMap<String, Object> data = new HashMap<>();data.put("name", "Sayi");data.put("start_time", "2019-08-04");data.put("author", new TextRenderData("000000", "Sayi"));data.put("author2", new TextRenderData("霸道的程序猿",StyleBuilder.newBuilder().buildColor("00FF00")//顏色.buildStrike()//刪除線.buildBold()//粗體.buildItalic()//斜體.buildUnderLine()//下劃線.buildFontFamily("微軟雅黑")//字體.buildFontSize(12)//字號.build()));// 超鏈接data.put("link", new HyperLinkTextRenderData("website", "卅一"));// 錨點data.put("anchor", new HyperLinkTextRenderData("anchortxt", "anchor:appendix1"));render(data);?

運行效果

4、圖片標簽

圖片標簽以@開始:{{@var}}

示例代碼

?HashMap<String, Object> data = new HashMap<>();// 本地圖片data.put("local", new PictureRenderData(80, 100, "D://test//test.png"));// 圖片流try {data.put("localbyte", new PictureRenderData(80, 100, ".png", new FileInputStream("D://test//test.png")));} catch (FileNotFoundException e) {e.printStackTrace();}// 網絡圖片(注意網絡耗時對系統可能的性能影響)data.put("urlpicture", new PictureRenderData(50, 50, ".png", BytePictureUtils.getUrlBufferedImage("http://deepoove.com/images/icecream.png")));// java 圖片try {BufferedImage image = ImageIO.read(new File("D://test//test.png"));data.put("bufferimage", new PictureRenderData(80, 100, ".png", image));} catch (IOException e) {e.printStackTrace();}render(data);?

運行結果

5、表格標簽

表格標簽以#開始:{{#var}}

示例代碼

??????? HashMap<String, Object> data = new HashMap<>();RowRenderData header = RowRenderData.build(new TextRenderData("000000", "姓名"), new TextRenderData("000000", "學歷"));RowRenderData row0 = RowRenderData.build("張三", "研究生");RowRenderData row1 = RowRenderData.build("李四", "博士");data.put("table", new MiniTableRenderData(header, Arrays.asList(row0, row1)));render(data);

運行結果

6、圖表標簽-餅狀圖

模板文件中插入圖表-餅狀圖

右擊餅圖,查看可選文字-輸入

{{pieChart}}

編寫測試代碼

??????? HashMap<String, Object> data = new HashMap<>();ChartSingleSeriesRenderData pie = new ChartSingleSeriesRenderData();pie.setChartTitle("ChartTitle");pie.setCategories(new String[] { "俄羅斯", "加拿大", "美國", "中國" });pie.setSeriesData(new SeriesRenderData("countries", new Integer[] { 17098242, 9984670, 9826675, 9596961 }));data.put("pieChart", pie);render(data);

運行結果

其它圖表使用參考官網。

7、pot-tl還有更多的功能、模板、示例代碼可參考官網

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

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

相關文章

即插即用篇 | YOLOv8 引入 MHSA 注意力機制 | 《Bottleneck Transformers for Visual Recognition》

論文名稱:《Bottleneck Transformers for Visual Recognition》 論文地址:https://arxiv.org/pdf/2101.11605.pdf 文章目錄 1 原理2 源代碼3 添加方式4 模型 yaml 文件template-backbone.yamltemplate-small.yamltemplate-large.yamltemplate-neck.yaml

Mac 重新安裝系統

Mac 重新安裝系統 使用可引導安裝器重新安裝&#xff08;可用于安裝非最新的 Mac OS&#xff0c;系統降級&#xff0c;需要清除所有數據&#xff09; 插入制作好的可引導安裝器&#xff08;U盤或者移動固態硬盤&#xff09;&#xff0c;如何制作可引導安裝器將 Mac 關機將 Ma…

排序——冒泡排序

冒泡排序的基本思想 從前往后&#xff08;或從后往前&#xff09;兩兩比較相鄰元素的值&#xff0c;若為逆序&#xff08;即 A [ i ? 1 ] < A [ i ] A\left [ i-1\right ]<A\left [ i\right ] A[i?1]<A[i]&#xff09;&#xff0c;則交換它們&#xff0c;直到序列…

MySQL慢查詢分析

1. 什么是慢查詢&#xff1f; 在MySQL中&#xff0c;慢查詢定義為執行時間超過特定閾值的查詢。這個閾值可以通過MySQL的配置選項long_query_time來設置。默認情況下&#xff0c;long_query_time的值是10秒&#xff0c;意味著任何執行時間超過10秒的查詢都會被認為是慢查詢。然…

標準PoE交換機、非標準PoE交換機和非PoE交換機三者到底有何區別?

目錄 前言&#xff1a; 一、標準PoE交換機 1.1 工作原理 1.2 應用場景 1、視頻監控 2、無線接入點 3、IP電話 1.3 優勢 1、簡化布線 2、簡化安裝 3、提高可靠性 二、非標準PoE交換機 2.1 工作原理 2.2 應用場景 1、無線路由器 2、IP電話 3、數據中心 2.3 優勢…

c++面試三 -- 智能指針--7000字

一、智能指針 C 中的智能指針是一種用于管理動態分配的內存的對象&#xff0c;它們可以自動進行內存管理&#xff0c;避免內存泄漏和懸掛指針等問題。 1. 懸掛指針 懸掛指針&#xff08;dangling pointer&#xff09;是指在程序中仍然存在但已經不再指向有效內存地址的指針。懸…

IO多路復用 poll模型

poll 是一種在 Linux 系統中進行 I/O 多路復用的模型&#xff0c;它與 select 類似&#xff0c;但具有一些不同之處。poll 允許監視的文件描述符數量不受限制&#xff0c;而不像 select 有一定的限制。 基本概念&#xff1a; poll 函數&#xff1a; 通過 poll 函數&#xff0c…

隊列的結構概念和實現

文章目錄 一、隊列的結構和概念二、隊列的實現三、隊列的實現函數四、隊列的思維導圖 一、隊列的結構和概念 什么是隊列&#xff1f; 隊列就是只允許在一端進行插入數據操作&#xff0c;在另一端進行刪除數據操作的特殊線性表&#xff0c;隊列具有先進先出 如上圖所示&#x…

【比較mybatis、lazy、sqltoy、mybatis-flex操作數據】操作批量新增、分頁查詢(二)

orm框架使用性能比較 環境&#xff1a; idea jdk17 spring boot 3.0.7 mysql 8.0比較mybatis、lazy、sqltoy、mybatis-flex操作數據 測試條件常規對象 orm 框架是否支持xml是否支持 Lambda對比版本mybatis????3.5.4sqltoy????5.2.98lazy????1.2.4-JDK17-SNAPS…

自定義 Python 程序參數解析

需要通過Python程序運行其它應用程序&#xff0c;程序格式為&#xff1a; 我的程序 <我的程序參數> 應用程序 <應用程序參數> 由于應用程序不固定&#xff0c;應用程序的參數也不固定&#xff0c;我的程序不需要對應用程序參數進行解析&#xff0c;僅需要解析自己的…

Vue+SpringBoot打造天然氣工程運維系統

目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 系統角色分類2.2 核心功能2.2.1 流程 12.2.2 流程 22.3 各角色功能2.3.1 系統管理員功能2.3.2 用戶服務部功能2.3.3 分公司&#xff08;施工單位&#xff09;功能2.3.3.1 技術員角色功能2.3.3.2 材料員角色功能 2.3.4 安…

快速冪-計算a的b次對m取余

題目 題解參考 a a ? a a a*a aa?a這部分是計算 a 2 i a^{2^i} a2i&#xff0c; a b Π i 0 t a n i 2 i Π i 0 t ( a 2 i ) n i a^b \Pi_{i0}^{t}a^{n_i 2^i} \Pi_{i0}^{t}(a^{2^i})^{n_i} abΠi0t?ani?2iΠi0t?(a2i)ni? ,代碼中的b&1是計算 n i n_i ni?…

Zabbix企業運維監控工具

Zabbix企業級監控方案 常見監控軟件介紹 Cacti Cacti是一套基于 PHP、MySQL、SNMP 及 RRD Tool 開發的監測圖形分析工具&#xff0c;Cacti 是使用輪詢的方式由主服務器向設備發送數據請求來獲取設備上狀態數據信息的,如果設備不斷增多,這個輪詢的過程就非常的耗時&#xff0…

sql注入less46作業三

采用報錯注入 updatexml(XML_document,XPath_string,new_value) 一共可以接收三個參數&#xff0c;報錯位置在第二個參數。 ?sort1 and updatexml(1,concat(0x7e,database(),0x7e),1)-- #查詢庫名 ?sort1 and updatexml(1,concat(0x7e,(select group_concat(table_name) fr…

[每周一更]-(第89期):開源許可證介紹

開源代碼本就是一種共享精神&#xff0c;一種大無畏行為&#xff0c;為了發揚代碼的魅力&#xff0c;創造更多的價值&#xff0c;讓愛傳遞四方&#xff0c;讓知識惠及更多人&#xff1b; 寫文章也是一種共享精神&#xff0c;讓知識傳播出去。 介紹下開源中不同許可證的內容限…

初學Vue總結

0 Vue概述 問題&#xff1a;我們已經學過了htmlCssjavascript,可以開發前端頁面了&#xff0c;但會發現&#xff0c;效率太低了。那么&#xff0c;有沒有什么工具可以提高我們的開發效率&#xff0c;加快開發速度呢&#xff1f; 他來了&#xff0c;他來了&#xff0c;他大佬似…

Spring注解之json 數據處理

目錄 1. 過濾 json 數據 2. 格式化 json 數據 3. 扁平化對象 1. 過濾 json 數據 JsonIgnoreProperties 作用在類上用于過濾掉特定字段不返回或者不解析。 //生成json時將userRoles屬性過濾 JsonIgnoreProperties({"userRoles"}) public class User { ?private S…

大宋咨詢如何進行汽車門店6S標準現場檢查

隨著汽車市場的快速發展&#xff0c;汽車門店的現場管理日益受到關注。6S標準現場檢查作為一項重要的評估工具&#xff0c;正在被越來越多的汽車廠商和經銷商采用。 6S標準現場檢查是指對汽車門店的整理、整頓、清潔、清掃、素養和安全六個方面進行規范和優化&#xff0c;旨在…

js中replaceAll在瀏覽器不兼容問題

前端項目有時候會出現瀏覽器使用replaceAll方法報錯問題&#xff0c;原因是一些舊版瀏覽器對replaceAll不是很兼容 解決辦法有三種&#xff1a; 1、str.replace(/word/g,“Excel”); g 的意義是&#xff1a;執行全局匹配&#xff08;查找所有匹配而非在找到第一個匹配后停止&am…

[AIGC] Java注解的生效時機詳解

在Java中&#xff0c;Annotation&#xff08;注解&#xff09;是一種用于描述代碼的元數據。它們可以為我們的代碼提供額外的信息&#xff0c;這些信息可以在編譯時或運行時被讀取。而注解的生效時機&#xff0c;主要由Java的Retention注解來控制。 一、注解的生效時機 Java中…