這篇文章,主要介紹如何安裝Jasper?Studio報(bào)表開(kāi)發(fā)工具以及使用Java填充模板文件內(nèi)容。
目錄
一、安裝Jasper Studio工具
1.1、下載報(bào)表開(kāi)發(fā)工具
1.2、工具界面介紹
(1)啟動(dòng)工具
(2)創(chuàng)建項(xiàng)目
二、制作Jasper模板文件
2.1、Jasper文件組成區(qū)域介紹
2.2、制作模板文件
三、使用Java填充數(shù)據(jù)
3.1、引入依賴(lài)
3.2、創(chuàng)建JasperReportsUtil工具類(lèi)
3.3、測(cè)試控制器類(lèi)
3.4、放置Jasper模板文件
3.5、運(yùn)行測(cè)試
一、安裝Jasper Studio工具
1.1、下載報(bào)表開(kāi)發(fā)工具
JasperReport提供了一個(gè)專(zhuān)門(mén)用于制作報(bào)表模板文件的開(kāi)發(fā)工具,叫做:Jasper Studio,官方下載地址是:https://community.jaspersoft.com/community-download,進(jìn)入下載界面,如下所示:
點(diǎn)擊下載按鈕,此時(shí)會(huì)彈出提示框,點(diǎn)擊繼續(xù)就會(huì)跳轉(zhuǎn)到下載詳情界面:https://community.jaspersoft.com/project/jaspersoft-studio/releases,如下所示:
在下載詳情界面中,可以有多種格式的下載文件,例如:exe、zip、tgz等,這里我選擇了zip文件,點(diǎn)擊下載就可以啦。需要注意的是下載時(shí)候,會(huì)提示讓你注冊(cè)JasperReports的社區(qū)賬號(hào),我們用自己郵箱注冊(cè)一個(gè)就可以啦。將下載完成的zip壓縮包解壓到你的工作目錄下,解壓之后,會(huì)得到一個(gè)jaspersoftstudio目錄,如下所示:
這個(gè)目錄下有一個(gè)Jaspersoft Studio.exe文件,雙擊這個(gè)文件就可以啟動(dòng) JasperReports 報(bào)表工具啦。
1.2、工具界面介紹
(1)啟動(dòng)工具
雙擊Jaspersoft Studio.exe文件,啟動(dòng)JasperReports報(bào)表工具,如下圖所示:
上圖就是啟動(dòng)之后的歡迎界面,看著有點(diǎn)像eclipse開(kāi)發(fā)工具對(duì)吧!沒(méi)錯(cuò),Jasper Studio就是基于Eclipse進(jìn)行開(kāi)發(fā)的,它可以單獨(dú)使用,也可以作為Eclipse的插件添加到Eclipse開(kāi)發(fā)工具中使用。
(2)創(chuàng)建項(xiàng)目
左上角選擇【File-->New-->Jasper Report】創(chuàng)建一個(gè)報(bào)表項(xiàng)目,如下所示:
在彈出框中,選擇自己需要的模板文件就可以啦,一般來(lái)說(shuō)都是選擇A4空白模板,或者是水平方向的A4空白模板,剩下的就是自己設(shè)計(jì)模板文件啦。
輸入項(xiàng)目名稱(chēng),選擇數(shù)據(jù)源之類(lèi)的,這里可以省略,直接傻瓜式的點(diǎn)擊next就行啦,最后點(diǎn)擊Finish即可。
項(xiàng)目創(chuàng)建成功之后,此時(shí)就會(huì)進(jìn)入到Jasper Studio的工作區(qū)域,Jasper工作區(qū)域大致分為下面這幾個(gè)部分:
到這里,Jasper Studio工具安裝好了,并且基本的工作區(qū)域也知道了,那就可以開(kāi)始制作自己的模板文件啦。
二、制作Jasper模板文件
2.1、Jasper文件組成區(qū)域介紹
可以看到在Jasper Studio的主報(bào)表區(qū)域有很多的組成部分,如下圖所示:
Jasper將模板文件劃分為上面幾個(gè)組成部分,每一個(gè)組成部分表示的含義不同,其中每一個(gè)部分的作用如下所示:
- Title區(qū)域:這個(gè)區(qū)域只會(huì)在模板文件的第一頁(yè)中顯示,從第二頁(yè)開(kāi)始就不會(huì)顯示,主要定義文件的標(biāo)題內(nèi)容。
- Page Header區(qū)域:這個(gè)區(qū)域是從第二頁(yè)開(kāi)始,每一頁(yè)都會(huì)顯示的頁(yè)頭信息,顯示在每一頁(yè)的最頂部。
- Column Header區(qū)域:當(dāng)我們使用了Table組件的時(shí)候,Column Header區(qū)域才會(huì)生效,它表示的表格的列頭,會(huì)在每一頁(yè)顯示。
- Detail區(qū)域:這個(gè)區(qū)域就是真正顯示內(nèi)容的區(qū)域,可以有多個(gè)Detail區(qū)域。
- Column Footer區(qū)域:當(dāng)我們使用了Table組件的時(shí)候,Column Footer區(qū)域才會(huì)生效,它表示的表格的列尾,會(huì)在每一頁(yè)顯示。
- Page Footer區(qū)域:這個(gè)區(qū)域是從第二頁(yè)開(kāi)始,每一頁(yè)都會(huì)顯示的頁(yè)腳信息,顯示在每一頁(yè)的最底部。
- Summary區(qū)域:這個(gè)區(qū)域是表示合計(jì)區(qū)域,只會(huì)顯示在最后一頁(yè)的末尾區(qū)域。
現(xiàn)在不知道這些東西不要緊,后面的文章中,我會(huì)通過(guò)制作一些模板文件,來(lái)演示一下每一個(gè)區(qū)域的作用。這里就先做一個(gè)簡(jiǎn)單的模板文件,用于演示一下如何通過(guò)Java向模板文件中填充數(shù)據(jù)。
2.2、制作模板文件
首先刪除文件中不需要的區(qū)域,選擇需要?jiǎng)h除的元素,右鍵點(diǎn)擊Delete就行啦:
只保留Title和Detail兩個(gè)區(qū)域,刪除之后的效果如下所示:
從右側(cè)組件元素欄里面,選擇【Text Field】組件,將其拖到Title區(qū)域中,如下:
選中剛剛添加的組件,可以編輯它的樣式,例如:字體、字體大小、對(duì)齊方式等、顏色等屬性。在【outline】區(qū)域中的【Paramater】,右鍵創(chuàng)建一個(gè)參數(shù),如下所示:
接著在右下角區(qū)域的【Properties】中,輸入?yún)?shù)名稱(chēng)以及參數(shù)對(duì)應(yīng)的Java數(shù)據(jù)類(lèi)型,如下:
參數(shù)創(chuàng)建完成之后,就可以再次選擇我們的之前拖到Title區(qū)域的【Text Field】組件,在右下角【Properties】屬性區(qū)域,設(shè)置組件使用的參數(shù)值名稱(chēng)。
這里使用的Parameters參數(shù),之后可以通過(guò)Java代碼直接傳遞一個(gè)Map對(duì)象進(jìn)行數(shù)據(jù)填充替換,按照這個(gè)方式,可以多創(chuàng)建幾個(gè)測(cè)試參數(shù),最終制作的簡(jiǎn)單模板如下所示:
既然模板文件制作好了,那就可以使用Java語(yǔ)言將需要填充的數(shù)據(jù)寫(xiě)入到模板文件里面啦。
三、使用Java填充數(shù)據(jù)
3.1、引入依賴(lài)
在實(shí)際開(kāi)發(fā)中,一般都是Web工程項(xiàng)目,所以這里是采用SpringBoot工程搭建的一個(gè)項(xiàng)目環(huán)境,需要引入JasperReports相關(guān)的依賴(lài),如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gitcode.demo</groupId>
<artifactId>jasper-demo</artifactId>
<version>1.0.0</version>
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.3.5.RELEASE</version>
</parent>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- JasperReports 報(bào)表開(kāi)發(fā)所需依賴(lài) START -->
<!-- https://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports -->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.20.0</version>
<exclusions>
<!--
排除自帶的itext依賴(lài),因?yàn)樽詭У膇text版本是 2.1.7.js10
這個(gè)版本在中央倉(cāng)庫(kù)里面沒(méi)有,無(wú)法下載
-->
<exclusion>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 引入itext依賴(lài),因?yàn)镴asperReports中使用了itext操作PDF -->
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
<!-- JasperReports 報(bào)表開(kāi)發(fā)所需依賴(lài) END -->
<!--
引入 poi 依賴(lài),因?yàn)?jasper 底層操作excel使用的是poi組件
-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
</dependencies>
</project>
3.2、創(chuàng)建JasperReportsUtil工具類(lèi)
為了方便操作Jasper報(bào)表,這里在統(tǒng)一的類(lèi)里面進(jìn)行報(bào)表的處理,代碼如下所示:
package com.gitcode.demo.util;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.export.*;
import org.springframework.core.io.ClassPathResource;
import java.io.InputStream;
import java.util.Map;
import java.util.Objects;
/**
* @version 1.0.0
* @Date: 2023/8/7 14:14
* @Author ZhuYouBin
* @Description: JasperReports 工具類(lèi)
*/
public class JasperReportsUtil {
/**
* 使用 JasperReports 生成報(bào)表文件
* @param templatePath 模板文件路徑及名稱(chēng)
* @param fileName 生成的文件名稱(chēng)
* @param fileType 生成的文件類(lèi)型,例如: pdf、html、xls 等
* @param parameters 傳遞到 jrxml 模板文件中的數(shù)據(jù)參數(shù)
* @return 返回生成的報(bào)表文件路徑
*/
public static String generateReport(String templatePath, String fileName, String fileType, Map<String, Object> parameters) throws Exception {
// 1、獲取 jasper 模板文件【采用流的方式讀取】
ClassPathResource resource = new ClassPathResource(templatePath);
InputStream in = resource.getInputStream();
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(in);
// 2、將 parameters 數(shù)據(jù)參數(shù)填充到模板文件中
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource());
// 3、按照指定的 fileType 文件類(lèi)型導(dǎo)出報(bào)表文件
if (Objects.equals("pdf", fileType)) {
JasperExportManager.exportReportToPdfFile(jasperPrint, fileName + ".pdf");
} else if (Objects.equals("xls", fileType)) { // 導(dǎo)出 xls 表格
JRXlsExporter exporter = new JRXlsExporter();
exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); // 設(shè)置導(dǎo)出的輸入源
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(fileName + ".xls")); // 設(shè)置導(dǎo)出的輸出源
// 配置信息
SimpleXlsReportConfiguration configuration = new SimpleXlsReportConfiguration();
configuration.setOnePagePerSheet(true); // 每一頁(yè)一個(gè)sheet表格
exporter.setConfiguration(configuration); // 設(shè)置配置對(duì)象
exporter.exportReport(); // 執(zhí)行導(dǎo)出
} else if (Objects.equals("xlsx", fileType)) { // 導(dǎo)出 xlsx 表格
JRXlsxExporter exporter = new JRXlsxExporter();
exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); // 設(shè)置導(dǎo)出的輸入源
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(fileName + ".xlsx")); // 設(shè)置導(dǎo)出的輸出源
SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration();
configuration.setOnePagePerSheet(true); // 每一頁(yè)一個(gè)sheet表格
exporter.setConfiguration(configuration);
exporter.exportReport(); // 執(zhí)行導(dǎo)出
} else if (Objects.equals("html", fileType)) {
JasperExportManager.exportReportToHtmlFile(jasperPrint, fileName + ".html");
}
return null;
}
}
3.3、測(cè)試控制器類(lèi)
編寫(xiě)一個(gè)TestController測(cè)試控制器,然后在代碼中添加需要填充的模板數(shù)據(jù),如下:
package com.gitcode.demo.web;
import com.gitcode.demo.util.JasperReportsUtil;
import net.sf.jasperreports.engine.util.JRResourcesUtil;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.ResourcePatternUtils;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
/**
* @version 1.0.0
* @Date: 2023/8/10 21:13
* @Author ZhuYouBin
* @Description:
*/
@RestController
@RequestMapping("/api/report")
public class TestController {
@GetMapping("/export")
public String exportFile(String format) throws Exception {
ClassPathResource resource = new ClassPathResource("MyFirstReport.jasper");
String templatePath = resource.getPath();
String fileName = "Jasper導(dǎo)出文件";
/*
創(chuàng)建傳遞到 Jasper 模板文件中的數(shù)據(jù)參數(shù)。
注意:參數(shù)的 key 必須和 Jasper Studio 中創(chuàng)建的 Parameters 參數(shù)名稱(chēng)相同,否則匹配不上,無(wú)法填充數(shù)據(jù)。
*/
Map<String, Object> parameters = new HashMap<>();
parameters.put("titleName", "This is a title.");
parameters.put("userName", "Tom");
parameters.put("sex", "man");
parameters.put("age", "20");
parameters.put("address", "everywhere.");
// 執(zhí)行導(dǎo)出操作
return JasperReportsUtil.generateReport(templatePath, fileName, format, parameters);
}
}
3.4、放置Jasper模板文件
將之前制作好的Jasper模板文件編譯,編譯之后會(huì)生成一個(gè)【.jasper】后綴的文件,這個(gè)文件就是我們要的模板文件,要把這個(gè)文件放到工程的【src/main/resources】資源目錄里面,如下所示:
3.5、運(yùn)行測(cè)試
啟動(dòng)工程,打開(kāi)瀏覽器訪(fǎng)問(wèn)http://localhost:8080/api/report/export?format=pdf地址,此時(shí)會(huì)在工程目錄下,生成對(duì)應(yīng)的文件:
打開(kāi)文件查看內(nèi)容,如下所示:
到此,Jasper Studio報(bào)表工具的安裝、制作簡(jiǎn)單模板以及使用Java填充模板文件數(shù)據(jù)就介紹完啦。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-770910.html
綜上,這篇文章結(jié)束了,主要介紹如何安裝Jasper?Studio報(bào)表開(kāi)發(fā)工具以及使用Java填充模板文件內(nèi)容。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-770910.html
到了這里,關(guān)于【JasperReports筆記01】Jasper Studio報(bào)表開(kāi)發(fā)工具的安裝以及使用Java填充模板文件內(nèi)容的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!