java通過poi-tl導出word實戰詳細步驟

文章目錄

  • 與其他模版引擎對比
  • 1.引入maven依賴包
  • 2.新建Word文檔exportWprd.docx模版
  • 3.編寫導出word接口代碼
  • 4.導出成果

poi-tl是一個基于Apache POI的Word模板引擎,也是一個免費開源的Java類庫,你可以非常方便的加入到你的項目中,并且擁有著讓人喜悅的特性。中文網站

  • 可以通過word模版引擎渲染文本、圖片、表格、列表數據
  • 可以渲染條形圖(3D條形圖)、柱形圖(3D柱形圖)、面積圖(3D面積圖)、折線圖(3D折線圖)、雷達圖、餅圖(3D餅圖)、散點圖等圖表渲染
  • 可以根據條件隱藏或者顯示某些文檔內容(包括文本、段落、圖片、表格、列表、圖表等)
  • 可以根據集合循環某些文檔內容(包括文本、段落、圖片、表格、列表、圖表等)
  • 支持設置書簽,文檔內錨點和超鏈接功能
  • 模板即樣式,同時代碼也可以設置樣式
  • 插件化設計,在文檔任何位置執行函數

與其他模版引擎對比

在這里插入圖片描述

1.引入maven依賴包

(1)引入poi-tl包

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

(2)因為poi-tl依賴于Apache POI5.2.2+,所以必須映入poi依賴包

<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version>
</dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.2</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.2</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>5.2.2</version><scope>compile</scope>
</dependency>

(3)繼續 引入poi-tl需要的commons-io與log4j-api依賴包(必須引入,否則會報錯,報錯如下)

<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version>
</dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.14.1</version>
</dependency>

不引入會導致報錯,報錯如下:

在這里插入圖片描述

2.新建Word文檔exportWprd.docx模版

在靜態資源目錄下resources/static/templates新建exportWord.docx,編寫以下模版內容:
在這里插入圖片描述

3.編寫導出word接口代碼

  @GetMapping("/exportWord")public void exportWord(HttpServletResponse response) throws FileNotFoundException {//存放數據,也就是填充在word里面的值Map<String, Object> params = new HashMap<>();params.put("title","測試使用poi-tl模版導出word");params.put("ceshi","測試使用poi-tl模版導出word");params.put("name","張三");params.put("text","知之為知之不知為不知");//模板路徑// String templatePath = "E:\\demo\\word.docx";// 或模板在靜態資源的相對路徑File rootFile = new File((ResourceUtils.getURL("classpath:").getPath()));File templateFile = new File(rootFile, "/static/templates/exportWord.docx");//jar包獲取不到文件路徑`//URLDecoder.decode() 解決獲取中文名稱文件路徑亂碼String templatePath = URLDecoder.decode(templateFile.getPath());//生成文件名String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + System.currentTimeMillis();// 導出woldtry {// 導出Word文檔為文件XWPFTemplate template = XWPFTemplate.compile(templatePath).render(params);// 將導出的Word文件轉換為流response.setContentType("application/octet-stream");response.setHeader("Content-disposition","attachment;filename=\""+fileName+".docx"+"\"");// HttpServletResponse responseOutputStream out = response.getOutputStream();BufferedOutputStream bos = new BufferedOutputStream(out);template.write(bos);bos.flush();out.flush();// 最后不要忘記關閉這些流。PoitlIOUtils.closeQuietlyMulti(template, bos, out);} catch (Exception e) {System.out.println("導出Word文檔時出現異常:" + e.getMessage());}}

4.導出成果

在這里插入圖片描述

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

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

相關文章

貪心算法-以高校教材管理系統為例

1.貪心算法介紹 1.算法思路 貪心算法的基本思路是從問題的某一個初始解出發一步一步地進行&#xff0c;根據某個優化測度&#xff0c;每一 步都要確保能獲得局部最優解。每一步只考慮一 個數據&#xff0c;其選取應該滿足局部優化的條件。若下 一個數據和部分最優解連在一起…

Pix4Dmapper:無人機測繪的革命性工具

在現代測繪和地理信息系統&#xff08;GIS&#xff09;領域&#xff0c;Pix4Dmapper無疑是一款革命性的工具。作為一名長期使用這款軟件的用戶&#xff0c;我深深感受到它在工作中的重要性和便利性。Pix4Dmapper不僅僅是一款軟件&#xff0c;更是測繪工作者的得力助手&#xff…

285個地級市出口產品質量及技術復雜度(2011-2021年)

出口產品質量與技術復雜度&#xff1a;衡量國家競爭力的關鍵指標 出口產品質量是衡量國內企業生產的產品在國際市場上競爭力的重要標準。它不僅要求產品符合國際標準和目標市場的法律法規&#xff0c;而且需要保證產品質量的穩定性和可靠性。而出口技術復雜度則進一步體現了一…

新一代信息技術及應用

關于云計算的描述不正確的是&#xff08; &#xff09;。 A 云計算可以通過網絡連接&#xff0c;用戶通過網絡接入“云”中并獲得有關的服務&#xff0c;“云”內節點之間也通過內部的網絡相連 B 云計算可以快速、按需、彈性服務&#xff0c;用戶可以按照實際需求迅速獲取或釋放…

[Python學習篇] Python面向對象——類

面向對象是什么&#xff1f; 面向對象&#xff08;Object-Oriented Programming&#xff0c;簡稱OOP&#xff09;是一種編程范式&#xff0c;它使用“對象”來設計應用程序和計算機程序。OOP的核心概念包括類&#xff08;Class&#xff09;、對象&#xff08;Object&#xff09…

批量下載手機中APP程序中文件

需求 利用 adb pull 下載手機中app的某目錄 adb pull 命令本身不支持直接下載整個目錄&#xff08;文件夾&#xff09;及其所有子目錄和文件作為一個單一的操作。但是&#xff0c;可以通過一些方法來間接實現這一目的。 方法 1. 首先將要下載的目錄進行 tar 打包 # 在 And…

Python面試題:Python 中的 `property` 函數有什么用?

在 Python 中&#xff0c;property 函數用于創建和管理類中的屬性。它允許你將方法轉換為屬性&#xff0c;這樣你可以像訪問變量一樣訪問這些方法。這對于控制屬性的訪問和修改非常有用&#xff0c;因為它允許你在屬性訪問時執行額外的邏輯&#xff08;如驗證或計算&#xff09…

光通信領域常見的會議和期刊總結

在高速光通信小組待了一年&#xff0c;對我們領域主要的會議和期刊也有了一定的了解&#xff0c;所以總結一下我們可以投的期刊或會議有哪些。會議一般有OFC、ECOC、CLEO、OECC、ACP等&#xff0c;期刊則有OE、OL、PTL、JLT、PJ、AO、JOSA等&#xff0c;下面簡單介紹一下。 先…

【atcoder】習題——位元枚舉

題意&#xff1a;求i&M的popcount的和&#xff0c;i屬于0……N 主要思路還是變加為乘。 舉個例子N22&#xff0c;即10110 假設M的第3位是1&#xff0c;分析N中&#xff1a; 00110 00111 00100 00101 發現其實等價于 0010 0011 0000 0001 也就是左邊第4位和第5…

算法學習筆記(8.1)-動態規劃入門

目錄 問題特性&#xff1a; 最優子結構&#xff1a; 代碼示例&#xff1a;&#xff08;動態規劃最優子結構&#xff09; 上述最小代價爬樓梯的運行過程&#xff1a; 代碼示例&#xff1a; 無后效性&#xff1a; 解析&#xff1a; 具體過程圖示如下&#xff1a; 具體的…

如何為IP申請SSL證書

目錄 以下是如何輕松為IP地址申請SSL證書的詳細步驟&#xff1a; 申請IP證書的基本條件&#xff1a; 申請IP SSL證書的方式&#xff1a; 確保網絡通信安全的核心要素之一&#xff0c;是有效利用SSL證書來加密數據傳輸&#xff0c;特別是對于那些直接通過IP地址訪問的資源。I…

使用 Azure DevOps Pipelines 生成 .NET Core WebJob 控制臺應用 CI/CD

Web 應用程序通常需要作為后臺任務運行的進程&#xff0c;并在特定時間間隔進行計劃或在事件中觸發。它們不需要花哨的 IO 接口&#xff0c;因為重點是過程而不是輸出。Azure WebJobs 提供了出色的支持&#xff0c;通常在云環境中通過 Web 控制臺應用程序來實現此目的。WebJob …

企業數字化轉型中的低代碼開發平臺應用:釋放創新潛能

隨著信息技術的飛速發展&#xff0c;企業數字化轉型已成為行業趨勢。在這場轉型浪潮中&#xff0c;低代碼開發平臺以其獨特的優勢&#xff0c;成為眾多企業實現快速迭代、高效創新的得力助手。本文將深入探討低代碼開發平臺在企業數字化轉型中的應用&#xff0c;以及如何幫助企…

Mac平臺虛擬機 Parallels Desktop v19.4.1,支持M1/M2/M3芯片組

Parallels Desktop for Mac是功能強大靈活度高的虛擬化方案&#xff0c;無需重啟即可在同一臺電腦上隨時訪問Windows和Mac兩個系統上的眾多應用程序。從僅限于PC的游戲到生產力軟件&#xff0c;Parallels Desktop都能幫您實現便捷使用。Parallels Desktop 是一款專業的Mac虛擬機…

Docker搭建kafka+zookeeper以及Springboot集成kafka快速入門

參考文章 【Docker安裝部署KafkaZookeeper詳細教程】_linux arm docker安裝kafka-CSDN博客 Docker搭建kafkazookeeper 打開我們的docker的鏡像源配置 vim /etc/docker/daemon.json 配置 { "registry-mirrors": ["https://widlhm9p.mirror.aliyuncs.com"…

vue父子組件通信實現模糊搜索功能

我遇到的問題&#xff1a; 我的搜索框在父頁面&#xff0c;靜態數據都在子頁面。怎么實現模糊查詢數據&#xff1f; 昨天的嘗試&#xff1a;先把搜索的內容數據存到session里&#xff0c;然后從session里拿&#xff0c; 結果&#xff1a;存是存進去了&#xff0c;卻拿不到。應…

Django學習收尾

啟動項目命令 python manage.py runserver 文件上傳功能實現 title "Form上傳"if request.method "GET":form UpForm()return render(request, upload_form.html, {"form": form, "title": title})form UpForm(datarequest.POS…

Java對象創建究竟是在棧上還是堆上??

在 Java 中&#xff0c;對象的創建通常情況下是在堆上。 基本數據類型&#xff08;如 byte、short、int、long、float、double、char&#xff09;在方法內聲明時&#xff0c;其值會存儲在棧上。除了基本數據類型之外的所有對象&#xff0c;都是由 Java 虛擬機&#xff08;JVM&…

python入門基礎知識·二

""" # Python介紹 # Python注釋 # 單行注釋&#xff1a; # # 多行注釋&#xff1a; r """""" # Python輸出和輸入 # print: 輸出 # input: 輸入 ①會讓程序暫停&#xff0c;②得到的是字符串內容 int(&…

Linux Mac 安裝Higress 平替 Spring Cloud Gateway

Linux Mac 安裝Higress 平替 Spring Cloud Gateway Higress是什么?傳統網關分類Higress定位下載安裝包執行安裝命令執行腳本 安裝成功打開管理界面使用方法configure.shreset.shstartup.shshutdown.shstatus.shlogs.sh Higress官網 Higress是什么? Higress是基于阿里內部的…