- 浏览: 1756870 次
- 性别:
- 来自: 大连
博客专栏
-
Spring数据库访问系列...
浏览量:173655
-
Android学习笔记
浏览量:368115
-
iBatis开发详解
浏览量:189258
-
Objective-C学习...
浏览量:99838
最新评论
-
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 9584上一篇我们制作了两行文字的翻转效果,他们是同步进行的, ... -
HTML5/CSS3翻转动画(一)
2011-12-30 13:43 17673翻转动画效果,就是将页面的元素(文字,图片)加入围绕坐 ... -
HTML5/CSS3清爽后台番外篇-添加锁屏效果
2011-10-29 12:34 10279锁屏效果,也就是将屏幕置于模态,不允许用户触发任何动作 ... -
基于HTML5/CSS3的清爽后台管理页面(二)
2011-10-02 09:11 13041本文接上一篇继续来介绍企业级开发中后台管理页面的制作。 ... -
基于HTML5/CSS3的清爽后台管理页面(一)
2011-10-01 21:36 20607后台管理系统是企业级开发中必不可少的组成部分,一般来说 ... -
HTML5绘制饼图实例(二)
2011-08-15 21:16 11226本文接上一讲继续 ... -
HTML5绘制饼图实例(二)
2011-08-15 20:48 8本文接上一讲继续来说明 我们继续来制作饼图示例 ... -
HTML5绘制饼图实例(一)
2011-08-14 15:28 12266HTML5引入Canvas元素 ... -
我的视频教程《中小企业OA系统》
2011-07-29 22:27 7748经过5个月的制作,和华章合作的《中小企业OA系统》Ja ... -
从一道Neusoft题中想到的Java日志API
2011-03-05 09:45 6937先来看看这一季度 ... -
Apache POI组件操作Excel,制作报表(四)
2011-01-04 22:36 10108上一篇我们介绍了如何制作复杂报表的分析和设计,本篇结合 ... -
Apache POI组件操作Excel,制作报表(三)
2010-12-27 23:26 13255上一篇介绍了POI组件操作Excel时如何对单元格和行 ... -
Apache POI组件操作Excel,制作报表(二)
2010-12-19 16:04 18246本文接上一篇继续探究POI组件的使用。 现在来看 ... -
Apache POI组件操作Excel,制作报表(一)
2010-12-16 22:25 42289Apache的POI组件是Jav ... -
使用JACKSON解析JSON(HttpClient 3处理请求)
2010-11-24 18:50 27463在上一篇中,我们 ... -
使用XStream解析XML(使用HttpClient 4发送请求)
2010-11-07 12:55 9584本文意在简单说明XStream解析XML,配合Http ... -
从一道Neusoft题中想到的IO和Comparator
2010-09-23 10:36 2833Neusoft内部定期举 ... -
Spring支持的Quartz程序调度
2010-09-05 21:45 9676开发时有时会有这样一种需求,定期计算某些数据或者执行某 ... -
Servlet 3(用Java生成GET/POST请求)
2010-08-29 10:59 14618Servlet是SUN指定的Java服务器端编程规范, ... -
使用Fusion Charts制作报表(dom4j生成XML)
2010-07-13 13:03 16826首次看到Fusion Charts是在Bug Free ...
相关推荐
总结起来,这篇博文会介绍如何在Struts2中集成JasperReport,通过编写Action类和配置Struts2的XML文件,实现动态报表的生成,并导出为PDF、Excel和HTML格式。这样的功能对于需要展示大量数据的应用场景非常有用,如...
在填充数据之后,JasperReport会生成最终的报表文件,这可能是一个PDF、HTML、Excel或其他格式的文件,然后可以通过Struts2的返回值机制重定向到一个展示报表的页面。为了在Web应用程序中呈现报表,通常需要将生成的...
Struts2、iReport与JasperReport是Java开发中用于构建高效、动态Web应用程序和报表生成的工具。在这个项目中,这些技术结合在一起,提供了一种强大的报表导出解决方案。以下是对这些关键技术及其在项目中的应用的...
**jasperReport+iReport制作PDF报表步骤** 1. **安装iReport**:首先需要下载并安装iReport工具,设置好JDK环境。 2. **创建数据源**:在iReport中配置数据源,如数据库连接,确保报表能够获取到数据。 3. **设计...
Struts2作为MVC(模型-视图-控制器)架构的一部分,主要用于处理HTTP请求并管理应用程序流程,而JasperReport则是一个强大的报告生成工具,能够创建复杂的报表设计,并以各种格式如PDF、HTML、Excel等导出。...
Struts2是一个流行的Java Web应用程序框架,它提供了MVC(模型-视图-控制器)架构,而JasperReport则是一个强大的报表生成库,可以生成多种格式的报表,如PDF、HTML、Excel等。iReport是JasperReport的可视化设计...
总之,Struts2结合JasperReport能够提供一种高效且灵活的方式,帮助开发者生成和导出Excel报表。通过精心设计的报表模板和合理的数据处理,我们可以为用户提供高质量的数据导出功能。在实际项目中,还可以根据需求...
Struts2的拦截器和插件机制使其能够灵活地集成其他组件,如JasperReport,实现动态报表的生成。 集成JasperReport和iReport到Struts2的过程大致如下: 1. **安装和配置**:首先,需要在项目中引入JasperReport和...
4. **生成报表**: 在Struts2的Action中编写代码,执行查询并填充JasperReport的数据源,然后调用JasperReport API生成报表。 5. **展示报表**: 将生成的报表以流的形式返回给前端,可以嵌入到Web页面中,或者让用户...
这个示例虽然简单,但它展示了如何在 Struts2 中使用 JasperReport 实现 Web 报表的基本流程。在实际项目中,你可能需要处理更复杂的数据源,如数据库查询结果,或者更复杂的报表交互。理解这个基础示例,有助于你更...
6. 页面集成:在Struts2的视图层,通常是一个JSP页面,可以通过Struts2的标签库来调用Action并展示报表。例如,使用标签显示报表内容,或者使用标签执行Action并重定向到报表页面。 总的来说,"整合Struts2.1+...
总的来说,这个项目组合使用了jasperReport生成报表,Struts2处理Web请求,以及jatoolsPrinter进行打印,展示了Java企业级应用中一个完整的报表生成和打印流程。开发者需要熟悉这些库的使用,以及如何在Struts2框架...
本文将介绍如何在MyEclipse中使用iReport和JasperReport结合Struts2框架来开发报表。MyEclipse是一款强大的Java集成开发环境,而iReport是一款基于JasperReport的报表设计工具,Struts2则是一个流行的Java web应用...
Struts2是一个强大的MVC框架,用于构建动态、数据驱动的Web应用程序,而JasperReport则是一个开源的报表工具,可以生成丰富的报表,支持多种输出格式如PDF、HTML、Excel等。下面我们将深入探讨这两者如何整合以及...
将Struts2与JasperReport结合,可以实现Web应用中的动态报表生成和展示。 首先,我们需要理解Struts2的核心概念。Struts2框架基于拦截器模型,通过Action类处理用户请求,Action与视图(JSP)之间的交互由结果类型...
【MyEclipse、Eclipse、iReport、JasperReport与Struts2的整合】 在Java Web开发中,MyEclipse和Eclipse是两种常用的集成开发环境(IDE),它们提供了丰富的功能,包括代码编辑、调试、构建和部署等。iReport是一款...
整合Struts2和JasperReport可以使Web应用具备强大的报表功能,但同时也需要注意管理和优化好相关的资源,以提供流畅的用户体验。在实际开发中,根据具体需求选择合适的技术栈和最佳实践,能有效地提高项目质量和开发...