Springboot整合JasperReport报表以及报表打印功能
Springboot整合JasperReport报表以及报表打印功能
本文章主要介绍如何将JasperReport做好的报表整合到springboot项目中。
关于如何下载和使用JasperReport工具做报表这里就不详细介绍了,可以查看该帖子进行下载,配置和操作:https://blog.csdn.net/dullchap/article/details/51799070
在做好报表以后,运行.jrxml文件,会生成一个pdf格式的.jasper文件,如图:
接下来可以把这两个文件拷贝到springboot项目的resource目录下,如图:
pom中引入maven依赖:
<dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports</artifactId> <version>6.12.2</version> <exclusions> <exclusion> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> </exclusion> <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>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</version></dependency><dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.4.11</version></dependency><dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports-fonts</artifactId> <version>6.0.0</version></dependency><dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-pdfa</artifactId> <version>5.5.0</version></dependency>
然后可以在controller层创建一个JasperReportController,详细代码如下:
import io.swagger.annotations.Api;import lombok.extern.slf4j.Slf4j;import net.sf.jasperreports.engine.*;import net.sf.jasperreports.engine.util.JRLoader;import org.springframework.core.io.ClassPathResource;import org.springframework.web.bind.annotation.*; import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.sql.DataSource;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.sql.Connection;import java.sql.SQLException;import java.util.HashMap;import java.util.Map; @Slf4j@Api(tags="报表url管理")
@RestController@RequestMapping("/jasperReport")public class JasperReportController { @Resource private DataSource dataSource; /** * 转换为pdf展示,也就是在线预览 * * @param reportName * @param parameters * @param response * @throws SQLException * @throws ClassNotFoundException * @throws JRException * @throws IOException */ @GetMapping("/{reportName}") public void getReportByParam( @PathVariable("reportName") final String reportName, @RequestParam(required = false) Map<String, Object> parameters, HttpServletRequest request, HttpServletResponse response) throws SQLException, ClassNotFoundException, JRException, IOException { parameters = parameters == null ? new HashMap<>() : parameters; if (reportName.equals("query2")){ parameters.put("wave_code",parameters.get("waveCode")); }else if (reportName.equals("queryByWaveCode")){ parameters.put("wave_code",parameters.get("waveCode")); } Connection connection = dataSource.getConnection(); //获取文件流 ClassPathResource resource = new ClassPathResource(reportName + ".jasper"); InputStream in = resource.getInputStream(); JasperReport jasperReport = (JasperReport) JRLoader.loadObject(in); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters,connection ); // JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, new JREmptyDataSource()); response.setContentType("application/pdf"); /*response.setContentType("text/html;charset=utf-8");*/ response.setHeader("Content-Disposition", "inline;"); final OutputStream outputStream = response.getOutputStream(); JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream); try { connection.close(); in.close(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } //打印功能 @GetMapping("/printReport/{reportName}") public void printReport( @PathVariable("reportName") final String reportName, @RequestParam(required = false) Map<String, Object> parameters, HttpServletRequest request, HttpServletResponse response) throws SQLException, ClassNotFoundException, JRException, IOException { parameters = parameters == null ? new HashMap<>() : parameters; if (reportName.equals("query2")){ parameters.put("wave_code",parameters.get("waveCode")); }else if (reportName.equals("queryByWaveCode")){ parameters.put("wave_code",parameters.get("waveCode")); } //获取文件流 ClassPathResource resource = new ClassPathResource(reportName + ".jasper"); InputStream in = resource.getInputStream(); JasperReport jasperReport = (JasperReport) JRLoader.loadObject(in); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource.getConnection()); //打印 JasperPrintManager.printReport(jasperPrint,true); }}这里面可以看到有两个方法,第一个方法是在线查看报表,也就是在线预览,第二个方法就是打印报表,接下来我大致解释一下: 首先,接收参数就不用多说了,这里采用了变量名作为路径,也就是jasper文件名字,请求后台路径也就是这样子的/jasperReport/printReport/query2。当然,这里我自己使用的jasper文件名字是query2。参数中reportName也就是文件名字,parameters中可以放需要传递的参数,比如说所要查的报表要有参数传递,参数就可以放到parameters中,在这里我是传递了一个参数,就是waveCode,接下来我又判断了一下,重新又赋了一下值wave_code,直接传递waveCode是有问题的,具体原理我认为可能是报表的sql语句的我用的参数就是wave_code,页面上传过来的是waveCode。 接下来的代码就是利用输入输出流以及JasperReport对象提供的方法来返回一个pdf文件,放到response中,因为是把文件放到连接池中的,所以最后要关闭,不然在线预览点几下连接池就崩溃了,很麻烦的。 第二个方法是打印报表,因为请求路径用了变量来传,所以又多加了一层,不然他没办法请求到的。然后利用JasperReport对象内置的打印方法,然后调出打印机进行打印。 要注意一点就是,idea中要设置VMoptions,如同所示:但是在服务器上只运行jar包的话就会有一个问题,也就是linux系统上,这个VMoptions没办法设置的,但是可以通过启动传参运行,nohup java -Djava.awt.headless=false -jar jeecg-boot-module-system-2.1.1.jar >catalina.out 2>&1 & (jar包名字自己做对应修改)
还有一个就是字体问题,不处理好会导致中文不显示,必须要做报表的字体对应,本人使用的是仿宋字体,在JasperReport报表工具中设置,可以百度搜帖子。 该帖子可能写的有些简陋,也是因为本人技术有限,有什么问题可以下方留言。
Springboot整合JasperReport报表以及报表打印功能相关推荐
- springboot 整合jasperReport 6.6.0 记录
经过2天对于jasper的研究,终于做出了第一个简单的报表打印现在记录一下整个过程 1. pom.xml修改增加 <dependency><groupId>net.sf.jas ...
- springboot整合vosk实现简单的语音识别功能
vosk开源语音识别 Vosk是开源的语音识别工具包.Vosk支持的事情包括: 支持十九种语言 - 中文,英语,印度英语,德语,法语,西班牙语,葡萄牙语,俄语,土耳其语,越南语,意大利语,荷兰人,加泰 ...
- 水晶报表2008 条码打印 扫描
前几天项目上用到了水晶报表的条码打印功能 最开始用的字体,code39 code128都试了,可以正常打印,但是扫描枪不识别, 据说code39值两边加*可以扫描到,我没能成功 又在网上找到以下方法, ...
- SpringBoot 整合Activiti(二)——流程审批完整示例
前两天做了一个SpringBoot整合Activiti的完整示例,功能包括:退回/通过(节点条件).指定办理人.生成流程图.高亮显示已办节点.查询任务列表(办理人)等,下面先简单记录(含完整代码),十 ...
- SpringBoot 整合 Spring Security 实现安全认证【SpringBoot系列9】
SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见. 程序员每天的CV 与 板砖,也要知其所以然,本系列课程可以帮助初学者学习 SpringBooot 项目开发 与 SpringCl ...
- java实现续打功能_浅谈报表工具的打印方案
报表工具除了基本的绘制报表,完成数据呈现(也就是让终端用户能看到报表),打印也是报表的基本功能之一. 当前报表工具很多,可以按地域.开闭源等划分,包括有杰表.水晶.Style Report.birt. ...
- 能实现报表打印功能的报表软件有哪些?
虽然表格制作软件可以在电脑显示屏上展示,但许多时候更需要纸张的直观展示分析,这就考验了报表工具的表格制作软件打印功能,表格制作软件离不开打印,打印就少不了要批量.因此本文旨在从多参打印,分页打印,缩 ...
- 【转】VS2013自带报表+打印功能
VS自带报表控件和打印功能,这样就给我们这些编程者带来了很大的方便.下面就将我做程序的一些小经历来跟大家一起分享一下. 1,我们右击U层所在文件夹添加"新建项". 2,在弹出的的添 ...
- 使用FastReport.net 报表在网页上实现打印功能
这些年的工作当中,最早是在8年前接触到FastReport这个报表工具,从名字上来看,直译过来就是快速报表,正所谓天下武功,唯快不破,FastReport报表早些年确实是制作报表的不二之选,8年前的工 ...
- php报表数据打印机,通过打印机打印带打印功能的php表
我有以下php表,我如何只在php表中添加打印功能?点击一个按钮,下面的表格通过打印机打印,我试过'CTRL P',我只得到页面的html部分示例页眉,页脚,导航栏,而不是结果php结果 echo & ...
最新文章
- Git011--分支管理策略
- 『Python』VS2015编译源码注意事项
- go python php_php 、go 、python http请求(get和post)
- linux nc命令用法举例
- HttpClient的超时用法小记
- HDU-4793 Collision 计算几何 解方程
- hdu4751Divide Groups(dfs枚举完全图集合或者bfs染色)
- 后疫情时代,那些迎来爆发机会的产业
- 添加lua_C++/Lua高级交互
- Python int() 函数
- 一张小柴胡汤打天下- 四川名医马有度
- java源码-AtomicInteger
- 超强功能WebSSH安装,解决Web远程SSH终端
- 前端登陆界面 html+js
- S一文读懂应力集中与应力奇异
- 邓俊辉数据结构学习笔记3-二叉树
- 什么是P=NP问题?
- PCB layout常用走线线宽选择参考
- 3D打印无人机等无人设备2——Ultimaker Cura 3.2.1设置中文
- 技术漫谈之——Jectpack Compose
热门文章
- process.cwd()与__dirname的区别
- nginx 为什么要反向代理 影藏后端 高效连接(给nginx,他自己返回) 端口冲突解决 多个服务...
- 户如何获得渗透服务---步骤与效果
- 《精通Matlab数字图像处理与识别》一第6章 频率域图像增强
- Cesium教程系列汇总
- php函数copy和rename的区别
- 多区域OSPF基本配置
- 2.Prometheus 监控技术与实践 --- Prometheus基本概念及部署
- 34.MySQL的高级安装和升级
- 24. yii2 表单赋值 model-load(), model-attributes 方法