- 浏览: 1748187 次
- 性别:
- 来自: 大连
博客专栏
-
Spring数据库访问系列...
浏览量:172832
-
Android学习笔记
浏览量:366576
-
iBatis开发详解
浏览量:188324
-
Objective-C学习...
浏览量:98767
最新评论
-
iLidy:
引用[/c
Hibernate持久化对象的生命周期详解 -
fengzigogo:
您好,有这个项目架构的源码下载地址吗?
一种Java Web应用开发框架的构建(基于Struts2+Spring+FreeMarker)之一 -
spring_springmvc:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
用Maven构建Java Web开发环境(Jetty容器)之二 -
springdata_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
Spring 3之MVC & Security简单整合开发(二) -
赵庆辉:
看帖回复是美德,楼主讲的很清晰明了,看了豁然开朗.
Java String对象的经典问题(new String())
JasperReport是一款非常优秀的Java开源报表API,它利用模板文件和数据源可以动态生成各种报表,并且提供模板制作工具iReport。网上有很多JasperReport的教程,不过大多都是拷来拷去,想制作一个报表还真难。最近项目组有PDF报表的需求,就把JasperReport报表的基础结合实例学了一遍。以一个例子来说明报表的做法,并结合当红Web框架Struts2来说明,其他框架都大同小异,但是本质不变。
JasperReport编辑好后生成XML模板文件JRXML和它独有的JASPER模板,使用二者之一即可在Web应用中编译运行。
首先,是下载API组件,到JasperReport的官网http://jasperforge.org/下载Jar开发包和模板制作工具iReport。下载完成,安装iReport。需要说明的是iReport的版本要和Jar的版本一致,否则会导致模板文件不识别的问题,这里都用3.7.2的版本来说明。
打开iReport,点击文件->New,选择Report中的一个模板,这里我选择空白A4页面来做演示,可以任我书写。
下一步给模板起名字,选择存放路径。下一步选择查询数据源,点击New新建,选择合适的数据连接即可,这里选择Database JDBC Connection,并选择MySQL作为数据库服务,后面的配置虽然是英文的,但是见名知义,就很简单了。
数据库配置完毕,就开始写SQL语句,这里不要挂where子句,只是select语句即可,不过要注意,字段名必须as重命名,否则到web应用中将会出现找不到字段的问题,如果列名太多,就耐心的一个一个写完。
这里我已经耐心的写完了,是一个简历库,字段比较多。第四步是选取字段,当然都选过来就行了。第五步是Group By就是分组设置,如果报表中需要合并单元格之类的高级操作,那么就需要考虑合理的分组显示了,我们演示不涉及高深操作。这里是和业务挂钩的,必须开发者自行研究了。然后就Finish了,得到一个完整的工作区。
左面是文档的结构,当前已经给我们分好了栏位,可以不全用,不需要的删除即可。中间是文档工作区,是我们创作的区域,右边是工具栏,有属性,控件等。属性工具栏提供对文档元素的控制,如大小,字体等。控件工具栏提供文档可以使用的控件,常用的是静态文本和属性文本。大家可以自行尝试使用,这里给出一个设计好的模板。
不需要改变的单元就是Static Text,需要动态变化的是Text Field。拖放好位置后右键Edit Expression即可修改表达式,iReport支持函数和参数定义,非常强大,支持运算,这里我们只选择已有字段的名即可。
设置好后,开始对中文进行处理,因为默认做好的模板是不支持中文显示的,在模板中修改字体属性,如下图。
这里只需设置Font Name,PDF Embedded勾上,上面那个选STSong-Light,PDF Encoding选择UniGB-UCS2-H即可。当然在Web应用中还需要一些支持PDF中文的Jar依赖,后面说明。注意任何字段不能遗漏,否则在编译JRXML时会报错。
模板制作完毕,拷贝JRXML文件出来,我们使用编译JRXML即可,而且这是可以阅读的XML文档。下面就是往Web应用中集成,我们使用Struts2,由于Struts2先天已经支持JasperReport的视图显示,拷贝插件包(Struts2的源码包中可以找到)到编译路径即可。这里我们不使用它提供的,而是自己做,感觉更容易理解。
在webapp目录(MyEclipse里默认是WebRoot目录)下新建文件夹jasper存放模板文件。
在Struts2中采用简单的处理方式,可以这样进行。
JRDataSource可以有很多中类型,这里使用的是JRBeanCollectionDataSource,参数是Collection类型的,那么使用List封装数据库操作提取的结果即可。这里使用Spring提供的JdbcTemplate对象的queryForList方法获取结果。
只需传入SQL语句,就是我们在iReport中写的那个,然后加让where子句获取单一记录即可。而要获取Excel,就把生成PDF部分的代码替换为:
其他都是不变的。之后配上Struts2的Action就可以访问了。还有几点需要说明:JasperReport所依赖的JAR包可以在运行时报错中去补充,这里给出所需依赖:apache-common的digester,beanutils,collections。Groovy包。iText2.1.7,它当前版本是5了,但是用2.1.7就行,因为新版本的package结构有所改变。处理中文的iTextAsian和iTextAsianCmaps,生成Excel需要POI包,如果没记错的话,就是这么多了。
最后注意系统运行环境,Linux下所需的字体可能没有,而Windows下是有的,所以服务器需要有字体才能生成报表,否则就会报错说字体不存在。这个操作很简单:把windows的中文字体(一般在C:\Windows\Fonts目录),复制到linux的/usr/share/fonts/chinese/TrueType目录下即可。最终我们得到的运行结果如下:
希望对大家有用,如果有对iReport和JasperReport有深入研究的欢迎交流。
你装毛线大神啊。别人是为了解决问题而来。你tmd为了装b而来!有必要吗?
您好,我不知道JasperReport有没有这种默认填充的选项,但应该可以遍历空数据来填充吧,这是我能想到的一种方法。
只能调整元素的高度了,这个好像还不能自动填充吧
基于您的项目配置即可,这里仅仅是对第三方类库的使用做出说明
有输出流就可以了,这里我没有使用jasper的插件,不需要找视图组件。
嗯,如果是xml只是在第一次请求时编译,后面就使用编译好的的了。
JasperReport编辑好后生成XML模板文件JRXML和它独有的JASPER模板,使用二者之一即可在Web应用中编译运行。
首先,是下载API组件,到JasperReport的官网http://jasperforge.org/下载Jar开发包和模板制作工具iReport。下载完成,安装iReport。需要说明的是iReport的版本要和Jar的版本一致,否则会导致模板文件不识别的问题,这里都用3.7.2的版本来说明。
打开iReport,点击文件->New,选择Report中的一个模板,这里我选择空白A4页面来做演示,可以任我书写。
下一步给模板起名字,选择存放路径。下一步选择查询数据源,点击New新建,选择合适的数据连接即可,这里选择Database JDBC Connection,并选择MySQL作为数据库服务,后面的配置虽然是英文的,但是见名知义,就很简单了。
数据库配置完毕,就开始写SQL语句,这里不要挂where子句,只是select语句即可,不过要注意,字段名必须as重命名,否则到web应用中将会出现找不到字段的问题,如果列名太多,就耐心的一个一个写完。
这里我已经耐心的写完了,是一个简历库,字段比较多。第四步是选取字段,当然都选过来就行了。第五步是Group By就是分组设置,如果报表中需要合并单元格之类的高级操作,那么就需要考虑合理的分组显示了,我们演示不涉及高深操作。这里是和业务挂钩的,必须开发者自行研究了。然后就Finish了,得到一个完整的工作区。
左面是文档的结构,当前已经给我们分好了栏位,可以不全用,不需要的删除即可。中间是文档工作区,是我们创作的区域,右边是工具栏,有属性,控件等。属性工具栏提供对文档元素的控制,如大小,字体等。控件工具栏提供文档可以使用的控件,常用的是静态文本和属性文本。大家可以自行尝试使用,这里给出一个设计好的模板。
不需要改变的单元就是Static Text,需要动态变化的是Text Field。拖放好位置后右键Edit Expression即可修改表达式,iReport支持函数和参数定义,非常强大,支持运算,这里我们只选择已有字段的名即可。
设置好后,开始对中文进行处理,因为默认做好的模板是不支持中文显示的,在模板中修改字体属性,如下图。
这里只需设置Font Name,PDF Embedded勾上,上面那个选STSong-Light,PDF Encoding选择UniGB-UCS2-H即可。当然在Web应用中还需要一些支持PDF中文的Jar依赖,后面说明。注意任何字段不能遗漏,否则在编译JRXML时会报错。
模板制作完毕,拷贝JRXML文件出来,我们使用编译JRXML即可,而且这是可以阅读的XML文档。下面就是往Web应用中集成,我们使用Struts2,由于Struts2先天已经支持JasperReport的视图显示,拷贝插件包(Struts2的源码包中可以找到)到编译路径即可。这里我们不使用它提供的,而是自己做,感觉更容易理解。
在webapp目录(MyEclipse里默认是WebRoot目录)下新建文件夹jasper存放模板文件。
在Struts2中采用简单的处理方式,可以这样进行。
public String printResumeToPDF() throws Exception { String jrxmlPath = getServletContext().getRealPath( "/jasper/sovoResume.jrxml"); List resumeInfo = getServMgr().getUserService().getResumeForDataSource( getLoginUserId()); Map<String, String> parameters = new HashMap<String, String>(); parameters.put("SUBREPORT_DIR", getServletContext().getRealPath( "/jasper")); JRDataSource dataSource = new JRBeanCollectionDataSource(resumeInfo); JasperReport report = JasperCompileManager.compileReport(jrxmlPath); JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, dataSource); HttpServletResponse response = ServletActionContext.getResponse(); OutputStream ouputStream = response.getOutputStream(); // 设置相应参数,以附件形式保存PDF response.setContentType("application/pdf"); response.setCharacterEncoding("UTF-8"); response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(getLoginUserRealName() + "的个人简历", "UTF-8") + ".pdf\""); // 使用JRPdfExproter导出器导出pdf JRPdfExporter exporter = new JRPdfExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream); exporter.exportReport();// 导出 ouputStream.close();// 关闭流 return null; }
JRDataSource可以有很多中类型,这里使用的是JRBeanCollectionDataSource,参数是Collection类型的,那么使用List封装数据库操作提取的结果即可。这里使用Spring提供的JdbcTemplate对象的queryForList方法获取结果。
public List getResumeForDataSource(Integer empId) { return jt.queryForList(SQL_GET_RESUME_FOR_DATASOURCE, new Object[] { empId }); }
只需传入SQL语句,就是我们在iReport中写的那个,然后加让where子句获取单一记录即可。而要获取Excel,就把生成PDF部分的代码替换为:
// 设置相应参数,以附件形式保存XLS response.setContentType("application/vnd.excel"); response.setCharacterEncoding("UTF-8"); response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(getLoginUserRealName() + "的个人简历", "UTF-8") + ".xls\""); // 使用JRXlsExporter导出器导出xls JRXlsExporter exporter = new JRXlsExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream); exporter.exportReport();// 导出 ouputStream.close();// 关闭流
其他都是不变的。之后配上Struts2的Action就可以访问了。还有几点需要说明:JasperReport所依赖的JAR包可以在运行时报错中去补充,这里给出所需依赖:apache-common的digester,beanutils,collections。Groovy包。iText2.1.7,它当前版本是5了,但是用2.1.7就行,因为新版本的package结构有所改变。处理中文的iTextAsian和iTextAsianCmaps,生成Excel需要POI包,如果没记错的话,就是这么多了。
最后注意系统运行环境,Linux下所需的字体可能没有,而Windows下是有的,所以服务器需要有字体才能生成报表,否则就会报错说字体不存在。这个操作很简单:把windows的中文字体(一般在C:\Windows\Fonts目录),复制到linux的/usr/share/fonts/chinese/TrueType目录下即可。最终我们得到的运行结果如下:
希望对大家有用,如果有对iReport和JasperReport有深入研究的欢迎交流。
评论
20 楼
q188784048
2015-06-23
iris_1992 写道
2005年以前,国外开原报表完全碾压国产软件,但是现在国内软件,像帆软、FineBI,都比较牛掰了,设计模式和数据处理方面优于开源报表,真犯不着再用ireport了,
完爆ireport啊
完爆ireport啊
你装毛线大神啊。别人是为了解决问题而来。你tmd为了装b而来!有必要吗?
19 楼
iris_1992
2015-04-30
2005年以前,国外开原报表完全碾压国产软件,但是现在国内软件,像帆软、FineBI,都比较牛掰了,设计模式和数据处理方面优于开源报表,真犯不着再用ireport了,
完爆ireport啊
完爆ireport啊
18 楼
Washingtion
2015-01-28
List resumeInfo = getServMgr().getUserService().getResumeForDataSource(
getLoginUserId());
这个作为配置数据源里面的参数,具体的东西我不知道,没有看明白
getLoginUserId());
这个作为配置数据源里面的参数,具体的东西我不知道,没有看明白
17 楼
wk82254887
2014-04-02
楼主可否给个demo,非常感谢,82254887@qq.com
16 楼
roboa
2014-02-23
不错啊! 学习学习!
15 楼
FireZHFox
2013-04-22
楼主可否给个struts2+jasperport的demo,学习一下 335064178@qq.com,非常感谢
14 楼
huangdayang
2013-03-15
,看起来很不错,先拿去试试先
13 楼
wangkongchao
2013-03-03
:
12 楼
Internetcn
2012-12-19
写的不错,mark。。。。。。
11 楼
sarin
2012-05-06
gzcsschen 写道
你好我有个问题就是
我如果打印出表格形式的样子
但是最后一页如果只有一条数据
表格就只有一行
不是用的表格元素是用textfield拼接模拟的
就出现这样的效果
name age sex
张山 10 李四
页数 10
我们怎么用空的格子把中间空白的区域填充上去呢
我如果打印出表格形式的样子
但是最后一页如果只有一条数据
表格就只有一行
不是用的表格元素是用textfield拼接模拟的
就出现这样的效果
name age sex
张山 10 李四
页数 10
我们怎么用空的格子把中间空白的区域填充上去呢
您好,我不知道JasperReport有没有这种默认填充的选项,但应该可以遍历空数据来填充吧,这是我能想到的一种方法。
10 楼
gzcsschen
2012-05-06
你好我有个问题就是
我如果打印出表格形式的样子
但是最后一页如果只有一条数据
表格就只有一行
不是用的表格元素是用textfield拼接模拟的
就出现这样的效果
name age sex
张山 10 李四
页数 10
我们怎么用空的格子把中间空白的区域填充上去呢
我如果打印出表格形式的样子
但是最后一页如果只有一条数据
表格就只有一行
不是用的表格元素是用textfield拼接模拟的
就出现这样的效果
name age sex
张山 10 李四
页数 10
我们怎么用空的格子把中间空白的区域填充上去呢
9 楼
sarin
2011-10-12
jjcoaljj 写道
你好,我做的报表导成excel的时候下方有很大的空白,怎么去掉?我已经设置了
选项-》输出格式选项-》XSL Exporter 中选择参数 IS Remove Empty Space Between Rows 、Is Remove Empty Space Between Colums打钩选中;
O(∩_∩)O谢谢
选项-》输出格式选项-》XSL Exporter 中选择参数 IS Remove Empty Space Between Rows 、Is Remove Empty Space Between Colums打钩选中;
O(∩_∩)O谢谢
只能调整元素的高度了,这个好像还不能自动填充吧
8 楼
jjcoaljj
2011-10-12
你好,我做的报表导成excel的时候下方有很大的空白,怎么去掉?我已经设置了
选项-》输出格式选项-》XSL Exporter 中选择参数 IS Remove Empty Space Between Rows 、Is Remove Empty Space Between Colums打钩选中;
O(∩_∩)O谢谢
选项-》输出格式选项-》XSL Exporter 中选择参数 IS Remove Empty Space Between Rows 、Is Remove Empty Space Between Colums打钩选中;
O(∩_∩)O谢谢
7 楼
sarin
2011-08-09
Lorraine 写道
配置呢?不会……
基于您的项目配置即可,这里仅仅是对第三方类库的使用做出说明
6 楼
Lorraine
2011-08-09
配置呢?不会……
5 楼
sarin
2011-03-14
weir2009 写道
return null;
能得到报表么?
能得到报表么?
有输出流就可以了,这里我没有使用jasper的插件,不需要找视图组件。
4 楼
weir2009
2011-03-14
return null;
能得到报表么?
能得到报表么?
3 楼
sarin
2011-01-18
stormtoy 写道
不错,很详细,不过如果直接用编译好的文件,效率是不是会更好?
嗯,如果是xml只是在第一次请求时编译,后面就使用编译好的的了。
2 楼
stormtoy
2011-01-18
不错,很详细,不过如果直接用编译好的文件,效率是不是会更好?
1 楼
niweiwei
2011-01-11
写的不错,多向你学习......
发表评论
-
HTML5/CSS3翻转动画(二)
2011-12-31 11:28 9518上一篇我们制作了两行文字的翻转效果,他们是同步进行的, ... -
HTML5/CSS3翻转动画(一)
2011-12-30 13:43 17603翻转动画效果,就是将页面的元素(文字,图片)加入围绕坐 ... -
HTML5/CSS3清爽后台番外篇-添加锁屏效果
2011-10-29 12:34 10216锁屏效果,也就是将屏幕置于模态,不允许用户触发任何动作 ... -
基于HTML5/CSS3的清爽后台管理页面(二)
2011-10-02 09:11 12940本文接上一篇继续来介绍企业级开发中后台管理页面的制作。 ... -
基于HTML5/CSS3的清爽后台管理页面(一)
2011-10-01 21:36 20443后台管理系统是企业级开发中必不可少的组成部分,一般来说 ... -
HTML5绘制饼图实例(二)
2011-08-15 21:16 11144本文接上一讲继续 ... -
HTML5绘制饼图实例(二)
2011-08-15 20:48 8本文接上一讲继续来说明 我们继续来制作饼图示例 ... -
HTML5绘制饼图实例(一)
2011-08-14 15:28 12191HTML5引入Canvas元素 ... -
我的视频教程《中小企业OA系统》
2011-07-29 22:27 7687经过5个月的制作,和华章合作的《中小企业OA系统》Ja ... -
从一道Neusoft题中想到的Java日志API
2011-03-05 09:45 6883先来看看这一季度 ... -
Apache POI组件操作Excel,制作报表(四)
2011-01-04 22:36 9995上一篇我们介绍了如何制作复杂报表的分析和设计,本篇结合 ... -
Apache POI组件操作Excel,制作报表(三)
2010-12-27 23:26 13181上一篇介绍了POI组件操作Excel时如何对单元格和行 ... -
Apache POI组件操作Excel,制作报表(二)
2010-12-19 16:04 18191本文接上一篇继续探究POI组件的使用。 现在来看 ... -
Apache POI组件操作Excel,制作报表(一)
2010-12-16 22:25 42152Apache的POI组件是Jav ... -
使用JACKSON解析JSON(HttpClient 3处理请求)
2010-11-24 18:50 27373在上一篇中,我们 ... -
使用XStream解析XML(使用HttpClient 4发送请求)
2010-11-07 12:55 9525本文意在简单说明XStream解析XML,配合Http ... -
从一道Neusoft题中想到的IO和Comparator
2010-09-23 10:36 2779Neusoft内部定期举 ... -
Spring支持的Quartz程序调度
2010-09-05 21:45 9596开发时有时会有这样一种需求,定期计算某些数据或者执行某 ... -
Servlet 3(用Java生成GET/POST请求)
2010-08-29 10:59 14559Servlet是SUN指定的Java服务器端编程规范, ... -
使用Fusion Charts制作报表(dom4j生成XML)
2010-07-13 13:03 16715首次看到Fusion Charts是在Bug Free ...
相关推荐
使用JasperReport制作PDF所需要的包(2)
使用JasperReport制作PDF所需要的包(1)
使用Spring2.5+Struts2+ibatis+jasperreport3.1.4 实现Struts2与Jasperreport报表结合
struts jasperreport ireport5.0 字报表数据传递 子报表路径问题 中文问题
该工程下有ssh所需jar包,hicharts报表导出功能所需jar包,以及Jasperreport报表导出所需的jar包,主要是利用Jasperreport实现报表导出功能,可以完整跑通
而随着Struts2的流行,就应该研究一下在Struts2下如何利用JasperReports进行报表输出。本示例比较简单,采用的数据源即为JavaBean,而没有采用复杂的数据库,其实原理是一样的。只是传递给JasperReports的参数随着...
整合Struts2+JasperReport3 详细讲解利用iReport开发报表
NULL 博文链接:https://qdjinxin.iteye.com/blog/350194
NULL 博文链接:https://zmx.iteye.com/blog/583482
JasperReport制作PDF,Excel报表(Struts2实现)
iReport 和 Jasperreport整合开发web报表向导2
通过ireport生成模版,使用jasperreport调用模版,通过servlet生成pdf格式的文件,显示于页面以实现本地打印功能
整合Struts2+JasperReport Web报表应用示例 整合Struts2+JasperReport Web报表应用示例
程序员 使用 jasperreport studio生成中文报表 spring boot 教程
jasperreport_ireport+struts2打印报表
NULL 博文链接:https://hewei5894.iteye.com/blog/1744757
struts2 jasperreport
maven struts2 jasperreport ireport亲测通过整合多家资源
springboot整合JasperReport实现报表功能文章所需的全部资源
使用ireport和struts2进行报表设计的简单示例,生成普通报表和饼图、柱状图。java工程的lib里包含丰富的jar包,且很多都是从各个网站下载的最新版本,文件夹内还包含一些ireport和jasperreport文档,适合刚入门学习...