文章目录
前言
前几篇博客,重点说明了ireport 的安装与基本表格绘制
等。本篇博客主要进行springboot
整合,并进行报表的预览
与导出
。
开发环境
- springboot 2.1.4.RELEASE
- ireport 5.6
依赖引入
properties 设置
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<org.mapstruct.version>1.3.0.Final</org.mapstruct.version>
<jasperReport.version>6.16.0</jasperReport.version>
<jasperReport-fonts.version>6.16.0</jasperReport-fonts.version>
<groovy-all.version>2.5.9</groovy-all.version>
<itext-pdfa.version>5.5.13.2</itext-pdfa.version>
<dom4j.version>2.1.3</dom4j.version>
</properties>
主要依赖
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>${jasperReport.version}</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</exclusion>
<exclusion>
<artifactId>commons-beanutils</artifactId>
<groupId>commons-beanutils</groupId>
</exclusion>
<exclusion>
<artifactId>commons-collections</artifactId>
<groupId>commons-collections</groupId>
</exclusion>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>${groovy-all.version}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-fonts</artifactId>
<version>${jasperReport-fonts.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-pdfa</artifactId>
<version>${itext-pdfa.version}</version>
</dependency>
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>${dom4j.version}</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-poi</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-reader</artifactId>
<version>2.0.6</version>
</dependency>
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-jexcel</artifactId>
<version>1.0.9</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.8</version>
</dependency>
项目配置
配置中文显示与不乱码支持
在src/main/resources
下新增一个jasperreports_extension.properties
文件,并增加下列配置项:
net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.lobstertwo=fonts/fonts.xml
配置字体样式
在src/main/resources
下新建一个fonts
目录,其中增加下列文件
文件下载,后面补充下载途径。
新增jrxml目录存放ireport文件
在src/main/resources
下新建一个jrxml
目录
ireport绘制(无database)
创建文件
新增一个ireport文件,命名为003
设定数据源为empty datasource
增加传递参数集合
在Parameters
中,新增Parameters
,命名为userlists
,类型设置为list
。
Fields 配置集合中元数据属性
全选配置好的列表数据属性,拖拽至中间视图区的detail
中
新增dataset
点击左上角003
,右键选择Add Dataset
直接下一步
。
新增dataset的fields
将主体
中的Fields
的属性,复制到userlists DataSet
中。
报表中文列
中文列需要设定文本格式
与样式
。否则不会显示
保存与编译
点击保存,点击编译,生成对应的文件,并将文件复制到springboot项目中的jrxml
文件夹中
003.jasper 为编译后的文件
003.jrxml 为源文件
新增测试接口
@GetMapping("/test2")
public void print2(HttpServletResponse response) throws Exception {
// 非列表参数 $P
Map<String, Object> params = new HashMap<>();
params.put("userlists",getPrintMap2());
// $F
List<UserVo> maps = getPrintMap2();
log.info("组装后的数据:{}", JSON.toJSONString(maps));
//JasperHelper.exportPDF(response,"用户数据表","jrxml/002.jasper",maps,params,false);
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(getPrintMap2());
File jasperFile = ResourceUtils.getFile("classpath:jrxml/003.jasper");
JasperPrint jasperPrint = JasperFillManager.fillReport(new FileInputStream(jasperFile), params,dataSource);
JasperExportManager.exportReportToPdfStream(jasperPrint,response.getOutputStream());
response.setCharacterEncoding("utf-8");
response.setContentType("application/pdf");
response.setHeader("content-disposition", "inline;filename=" + URLEncoder.encode("003", "UTF-8") + ".pdf");
}
private List<UserVo> getPrintMap2() {
List<UserVo> data = new ArrayList<>();
for (int i = 0; i < 10; i++) {
data.add(new UserVo(""+i,"xj_"+i,"中文测试显示问题"));
}
return data;
}
启动项目,请求测试。效果预览如下:
配置字体文件
gitee font 文件下载
2023.07.18 GroovyCastException: Cannot cast object ‘10000’ with class ‘java.lang.String’ to ‘xxx.Double’
若整合后,填充数据生成pdf时,出现GroovyCastException: Cannot cast object '10000' with class 'java.lang.String
报错信息,
打开
xxxx.jxml
文件,查看parameters
和field
中同字段
的类型
是否一致