成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

強大!SpringBoot幾行代碼生成word文檔

開發(fā) 前端
Yet Another Report Generator (YARG) 是一款開源 Java 報表庫。它允許創(chuàng)建大多數常見格式(.doc、.docs、.xls、.xlsx、.html、.ftl、.csv)或自定義文本格式的模板,并填充由 SQL、Groovy 或 JSON 加載的數據。

環(huán)境:SpringBoot3.2.5

1. 簡介

Yet Another Report Generator (YARG) 是一款開源 Java 報表庫。它允許創(chuàng)建大多數常見格式(.doc、.docs、.xls、.xlsx、.html、.ftl、.csv)或自定義文本格式的模板,并填充由 SQL、Groovy 或 JSON 加載的數據。在本篇文章中,我將演示如何使用 Spring @RestController 輸出使用 JSON 加載數據的 .docx 文檔。

該開源庫的使用非常簡單,主要分為以下幾步:

  • 準備模板

word模板中我們可以通過${xxx}占位符。

  • 加載模板

加載模板對模板進行基本的配置。

  • 準備數據

根據你的需要你可以準備由JSON,SQL或者Groovy加載的數據。

  • 定義數據組

在上一步中準備完數據后,接下來就是這些數據應該如何對應到word模板中的占位符。

  • 生成報告

根據上面的準備,最后就是將上面的數據組織在一起生成報告。

2. 實戰(zhàn)案例

2.1 引入依賴

<dependency>
  <groupId>com.haulmont.yarg</groupId>
  <artifactId>yarg</artifactId>
  <version>2.2.14</version>
</dependency>
<repositories>
  <repository>
    <snapshots>
      <enabled>false</enabled>
    </snapshots>
    <id>repo-cuba-platform-work</id>
    <name>repo</name>
    <url>https://repo.cuba-platform.com/content/groups/work</url>
  </repository>
</repositories>

有了上面的依賴無需進行其它的配置,直接可以在代碼中編寫非常少的代碼就能完成word報告的生成。

2.2 設計word模板

圖片圖片

以上的${xxx}是我們將要填充的占位符數據。注意這里的R在接下來你將看到這里代表什么意思。

2.3 加載模板

我這里將模板放入到classpath/templates中,如下:

圖片圖片

接下來就是加載該day.docx模板,代碼如下:

ReportBuilder reportBuilder = new ReportBuilder();
ReportTemplateBuilder reportTemplateBuilder = new ReportTemplateBuilder()
    .documentPath(new ClassPathResource("templates/day.docx").getURI().getPath())
    .documentName("day.docx")
    .outputType(ReportOutputType.docx)
    .readFileFromPath() ;
reportBuilder.template(reportTemplateBuilder.build()) ;

以上代碼非常的簡單,就是對模板的加載及簡單的配置。

2.4 準備數據

這里為了演示的簡單,使用的靜態(tài)數據

Map<String, Object> data = Map.of(
  "date", "2018-12-20", "p1", 234, "p2", 123, 
  "p3", 489, "p4", 789, "p5", 127, "p6", 489) ;
// 將該map數據生成json字符串形式
String jsonStr = new ObjectMapper().writeValueAsString(data) ;

注意,這里的屬性都是要和word模板占位符對應的。

2.5 定義數據組

數據組是個抽象的概念,簡單理解就是在上一步中定義的數據如何能正確的替換word模板中的占位符。

BandBuilder bandBuilder = new BandBuilder() ;
ReportBand r = bandBuilder.name("R")
    .query("R", "parameter=p$", "json")
    .build() ;
reportBuilder.band(r) ;

這里這里的name("R"),也就是在word模板中使用的R;接著是定義了如何從json中查詢數據query,parameter=p這里是定義查詢查詢參數p,而這個p一會在最后生成報表時你將看到這里的p;$表示json-path的根路徑,從根路徑查找每一個屬性值。

2.6 生成報告

Report report = reportBuilder.build() ;
Reporting reporting = new Reporting() ;
reporting.setFormatterFactory(new DefaultFormatterFactory());
reporting.setLoaderFactory(new DefaultLoaderFactory().setJsonDataLoader(new JsonDataLoader()));
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
reporting.runReport(new RunParams(report).param("p", jsonStr), response.getOutputStream());

上面param("p", jsonStr),分別就是上面我們的查詢參數parameter=p,jsonStr就是我們準備的json數據。

完成代碼如下:

圖片圖片

以上是生成一個word報告所有流程及全部代碼。接下來進行測試,訪問上面的接口,將下載word文件,最終內容如下:

圖片圖片

成功生成報告。

責任編輯:武曉燕 來源: Spring全家桶實戰(zhàn)案例源碼
相關推薦

2023-10-27 11:38:09

PythonWord

2022-01-07 10:13:07

Tkinter代碼Kivy

2011-06-23 09:13:20

JavaWord

2019-11-06 11:01:57

Python人臉識別代碼

2022-04-15 07:21:12

架構開源模板引擎

2024-07-29 08:30:24

2009-08-18 13:35:08

C#動態(tài)生成Word文

2023-11-01 10:36:19

2020-10-20 09:53:11

代碼IDEA生成器

2020-12-30 10:55:01

代碼Java二維碼

2024-01-10 14:45:46

Redis數據庫存儲

2023-12-24 22:52:26

PythonPPT代碼

2021-03-24 15:29:48

Python 開發(fā)編程語言

2020-08-10 06:36:21

強化學習代碼深度學習

2023-09-26 10:52:38

LinuxDoxygen

2021-12-12 18:18:15

代碼元宇宙Python

2021-06-22 09:55:05

代碼圖像技術

2024-08-30 11:28:09

2021-09-08 11:02:32

Java代碼圖片
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 福利在线看 | 国产综合久久久 | 国产高清在线精品一区二区三区 | 日韩在线免费播放 | 免费亚洲一区二区 | 国产免费一区 | 国产精品一区二区免费 | 免费视频一区 | 亚洲国产精品一区二区三区 | 成人免费在线观看视频 | 免费精品视频在线观看 | 岛国毛片在线观看 | av黄色在线 | 欧美日日日日bbbbb视频 | 国产精品视频久久久 | 久久激情视频 | 91一区二区在线观看 | 日韩一二区| 韩日av在线| 日日夜夜精品 | 日韩精品一二三区 | 日韩视频在线免费观看 | 激情 一区 | 国产成人在线视频 | 亚州精品成人 | 国产中文字幕在线 | 亚洲精品美女视频 | 国产精品免费小视频 | 日韩视频一区二区 | 日韩欧美中文 | 一二三区视频 | 午夜激情影院 | 欧美一级视频免费看 | 国产一区三区在线 | 亚洲人成人一区二区在线观看 | 欧美日韩国产一区二区三区 | 国产精品久久久久久久久婷婷 | 中文字幕一区二区三区四区不卡 | 成人在线观看免费爱爱 | 亚洲欧美成人 | 人人爽日日躁夜夜躁尤物 |