jasperreport+jaspersoft生成报表并集成到spring boot中_springboot集成fastreport-程序员宅基地

技术标签: spring mvc  jaspersoft  jasper+java  jasperreport  jasper api  jasper  

最近项目搭建需要一个开源报表的架子,搜索的时候找到了帆软,虽然个人使用是免费,而且功能也很强大,但无奈项目强调开源只好放弃。

后来经同事推荐找到了jasperreport,网上整个搜了一遍,几乎全是jasperreport + ireport的文章。由于自己的电脑是win10,ireport装上之后怎么都无法运行,只好换了JasperSoft Studio。好在JasperSoft Studio和ireport使用差不多,找ireport的教程就可以了。

废话不多说立马开始:

1.生成jasper模板

JasperSoft Studio生成模板,参考http://blog.csdn.net/wlwlwlwl015/article/details/51312853,这位博主写的很详细,虽然不是同一个软件,但是按钮差不太多,稍微找一下即可按照教程完成模板。

我这里连接的是MySQL,注意一点,jdbc驱动因为不自带,需要再连接的时候手动指定驱动jar包的位置。


上面是界面说明。可根据自己的数据库表自行设计

2.集成到项目中

springmvc

目前网上的例子大都采用了mvc,个人实验成功参考的文章为

http://blog.csdn.net/xht555/article/details/43409637

http://blog.csdn.net/xht555/article/details/50434772

第一个链接介绍了如何使用javabean为数据源生成报表,第二个链接解决了中文展示的问题。

只需要下载第二个链接中的附件即可包含全部代码,无需重新下载。

如果没有csdn积分下载可以留言给我发你一份

http://blog.csdn.net/xht555/article/details/49717653这个解决了多数据源的问题,可以参考

-----------------------------------------------------------------------------------------------------------------------

如果报了groovy相关的错,可以更新pom.xml

		<dependency>
			<groupId>org.codehaus.groovy</groupId>
			<artifactId>groovy-all</artifactId>
			<version>2.4.7</version>
		</dependency>
关于中文显示问题,自己下载相应jar包,调试了半天没成功。最后还是直接用了原博主提供的itext-2.1.7.js2.jar和

itextasian-2.1.7.js2.jar两个文件,通过本地导入方式加到项目中。

关于中文问题可以看我最新的文章

jasper综合使用-javabean结合实际业务-解决PDF中文

-----------------------------------------------------------------------------------------------------------------------

研究完了上面2篇文章,即可对java的使用有了一定的了解,在这基础上进行下面的内容。

-----------------------------------------------------------------------------------------------------------------------

到目前为止成功了一半,因为项目是不会用到javabean的,还需要连数据库才行。网上搜了半天jdbc数据源

没有找到想要的结果。

	/**
	 * 返回iReport报表视图
	 * @param model
	 * @return
	 */
	@RequestMapping(value = "/report", method = RequestMethod.GET)
	public String report(Model model) {
		// 报表数据源
		JRDataSource jrDataSource = new JRBeanCollectionDataSource(JavaBeanPerson.getList());
		
		// 动态指定报表模板url
		model.addAttribute("url", "/WEB-INF/jasper/MvcIReportExample.jasper");
		model.addAttribute("format", "pdf"); // 报表格式
		model.addAttribute("jrMainDataSource", jrDataSource);
		
		return "iReportView"; // 对应jasper-defs.xml中的bean id
	}

上面是javabean数据源的代码片段,这已经包含在上面下载的代码之中。在研究使用jdbc连接的时候

http://antlove.iteye.com/blog/2149920只参考ConnectionProvider.java这一段即可)这篇文章给了我一些思路,文章

里面的ConnectionProvider.java文件建立了数据连接,还需要将查询结果作为datasource给jasper。

依照文章创建好ConnectionProvider.java文件。

同时参考这篇文章http://www.yiibai.com/jasper_reports/jasper_report_data_sources.html的介绍知道了jdbc作为数据源

的实现,如下图:


之前的代码片段我们用到了JRBeanCollectionDataSource,这里我们要改变为JRResultSetDataSource(ResultSet resultSet),到了这一步两边连接上了,见如下代码:

package com.pes_soft.example;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.pes_soft.example.datasource.JdbcConnectionProvider;
import com.pes_soft.example.model.JavaBeanPerson;

/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	private static final String queryStr = "打开jrxml文件找你的sql查询语句到这里";

	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
		
		String formattedDate = dateFormat.format(date);
		
		model.addAttribute("serverTime", formattedDate );
		
		return "home";
	}
	
	/**
	 * 返回iReport报表视图
	 * @param model
	 * @return
	 */
	@RequestMapping(value = "/report", method = RequestMethod.GET)
	public String report(Model model) {
		// 报表数据源
		JRDataSource jrDataSource = new JRBeanCollectionDataSource(JavaBeanPerson.getList());
		
		// 动态指定报表模板url
		model.addAttribute("url", "/WEB-INF/jasper/MvcIReportExample.jasper");
		model.addAttribute("format", "pdf"); // 报表格式
		model.addAttribute("jrMainDataSource", jrDataSource);
		
		return "iReportView"; // 对应jasper-defs.xml中的bean id
	}
	
	/**
	 * 返回iReport报表视图,支持PDF显示中文
	 * @param model
	 * @return
	 */
	@RequestMapping(value = "/reportChs", method = RequestMethod.GET)
	public String reportChs(Model model) {
		// 报表数据源
		JRDataSource jrDataSource = new JRBeanCollectionDataSource(JavaBeanPerson.getListChs());
				
		// 动态指定报表模板url
		model.addAttribute("url", "/WEB-INF/jasper/MvcIReportChsExample.jasper");
		model.addAttribute("format", "pdf"); // 报表格式
		model.addAttribute("jrMainDataSource", jrDataSource);
		
		return "iReportView";
	}
	
	/**
	 * 用jdbc为数据源,查询?表
	 * @param model
	 * @return
	 */
	@RequestMapping(value = "/jdbcUser", method = RequestMethod.GET)
	public String reportJdbcUser(Model model) {
		try {
			// 报表数据源
			Statement stmt = JdbcConnectionProvider.getConnection()
					.createStatement();
			//JdbcConnectionProvider为前面建立的mysql连接文件
			ResultSet rs = stmt.executeQuery(queryStr);//执行query语句得到结果
			JRDataSource jrDataSource = new JRResultSetDataSource(rs);

			// 动态指定报表模板url
			model.addAttribute("url", "/WEB-INF/jasper/?.jasper");
			//填入你的模板文件
			model.addAttribute("format", "pdf"); // 报表格式
			model.addAttribute("jrMainDataSource", jrDataSource);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "iReportView";
	}
}

    如上,即完成了jdbc数据源的报表。

还有一些问题,sql语句本来在模板文件中有,不应该写到程序文件中,这里只是简单实现,没有考虑优化的问题。更简单的集成到springboot中来使用,见下一篇博客,http://blog.csdn.net/pspr2/article/details/72901673

更多文章参阅http://blog.csdn.net/zhaodandan19910306/article/category/1347861

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/pspr2/article/details/72843356

智能推荐

Python 3.12.0 软件安装包以及Pycharm下载及安装教程!_python3.12安装包-程序员宅基地

文章浏览阅读1.6k次,点赞25次,收藏25次。Python一门面向对象的计算机程序设计语言,它使用对象,类和清晰的语法语言来帮助您创建,编辑和生成自己的应用程序。可以用于网络爬虫、web开发、人工智能、机器学习、数据挖掘及分析等工作,是目前最受欢迎的编程语言之一。_python3.12安装包

mysql正则表达式_数据库查询使用正则匹配aeiou-程序员宅基地

文章浏览阅读231次。MySQL 同样也支持其他正则表达式的匹配, MySQL中使用 REGEXP 操作符来进行正则表达式匹配。如果您了解PHP或Perl,那么操作起来就非常简单,因为MySQL的正则表达式匹配与这些脚本的类似。下表中的正则模式可应用于 REGEXP 操作符中。模式 描述 ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '..._数据库查询使用正则匹配aeiou

stm32uart_stm32 uart-程序员宅基地

文章浏览阅读539次。stm32uart_stm32 uart

C语言直线拟合函数_c 直线拟合-程序员宅基地

文章浏览阅读5.4k次。直线拟合算法函数说明:通过一些点拟合出一条直线。参数:pt_input指向传入的点的指针。ptNumbers传入的点数量。k指向拟合直线参数k的指针。b指向拟合直线参数b的指针。返回值:返回一个代数值判断拟合是否成功。如果成功,则返回 0。如果返回-1,表示点的数量<2。如果返回-2,表示x坐标无变化。代码:typedef struct tagPOINT_2 { double x; double y;}POINT_2, *PPOINT_2;int LineInf_c 直线拟合

java中的native关键字_java native关键字-程序员宅基地

文章浏览阅读4.1k次,点赞10次,收藏13次。java中的native关键字_java native关键字

实现MySQL版的urlencode与urldecode函数_mysql urlencoder.encode-程序员宅基地

文章浏览阅读1.5w次。实现MySQL版的urlencode与urldecodeurlencode执行如下脚本DELIMITER ;DROP FUNCTION IF EXISTS urlencode;DELIMITER |CREATE FUNCTION urlencode (s VARCHAR(4096)) RETURNS VARCHAR(4096)DETE_mysql urlencoder.encode

随便推点

二值化图片生成_在线二值化-程序员宅基地

文章浏览阅读3.5k次。由原图生成二值化图片_在线二值化

VMware中Manjaro安装VMwaretools的正确姿势_manjaro安装vmtools-程序员宅基地

文章浏览阅读2.4w次,点赞3次,收藏22次。VMware中Manjaro安装VMwaretools的正确姿势前言google的方法运行脚本结果正确打开方式卸载open-vm-tools下载vmwaretools补丁进入vmware-tools-patches目录运行补丁删除刚刚安装到一半就报错的安装目录重新安装补丁完成前言我最近发现的Manjaro,瞬间被他的画风吸引,然后欢天喜地地去官网下载manjaro的kde镜像,然后在虚拟机中安..._manjaro安装vmtools

linux xrdp端口修改,Ubuntu远程管理(xrdp设置)(含其他)-程序员宅基地

文章浏览阅读788次。安装及设置xrdptouch~/installXrdp.shcat>~/installXrdp.sh<#!/bin/bashecho"root:root123"|chpasswdsed-i"s,PermitRootLogin.*,PermitRootLoginyes,g"/etc/ssh/sshd_configservicesshrestartcp/etc/ap..._xrdp端口

美国计算机科学专业申请要求,美国计算机科学专业硕士申请要求-程序员宅基地

文章浏览阅读173次。想要申请美国计算机科学专业硕士的你,需要提早准备,因为好学校的申请结果源于前期的提早规划。下面就给大家谈一下计算机科学硕士的申请要求和名校推荐。其实美国计算机科学专业在美国来说概念很模糊,可以说CS,CE和EE是相通的。有些美国院校设有有单独的计算机科学系,也有一部分将EE和CS设在一个院系下的,比如说:MIT,UC Berkeley,Northeastern U等。还有一部分将CS和CE设在一起...

FISTA的由来:从梯度下降法到ISTA & FISTA_fista算法-程序员宅基地

文章浏览阅读4.8w次,点赞48次,收藏290次。前言:FISTA(A fast iterative shrinkage-thresholding algorithm)是一种快速的迭代阈值收缩算法(ISTA)。FISTA和ISTA都是基于梯度下降的思想,在迭代过程中进行了更为聪明(smarter)的选择,从而达到更快的迭代速度。理论证明:FISTA和ISTA的迭代收敛速度分别为O(1/k2)和O(1/k)。  本篇博文先从解决优化问题的传_fista算法

mac下 idea 注释快捷键冲突_idea和mac快捷键冲突-程序员宅基地

文章浏览阅读2.3k次,点赞7次,收藏2次。打开偏好设置,将冲突的快捷键关掉,就可以解决 idea 使用注释快捷键,会打开help页面的问题_idea和mac快捷键冲突