ireport——springboot整合并导出列表数据(无database)

前言

前几篇博客,重点说明了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;
}

启动项目,请求测试。效果预览如下:
在这里插入图片描述

配置字体文件

字体文件csdn下载地址

gitee font 文件下载

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文件,查看parametersfield同字段类型是否一致

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值