`

初学JasperReport 制作报表

阅读更多

  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中采用简单的处理方式,可以这样进行。 

Java代码  收藏代码
  1. public String printResumeToPDF() throws Exception {  
  2.         String jrxmlPath = getServletContext().getRealPath(  
  3.                 "/jasper/sovoResume.jrxml");  
  4.         List resumeInfo = getServMgr().getUserService().getResumeForDataSource(  
  5.                 getLoginUserId());  
  6.         Map<String, String> parameters = new HashMap<String, String>();  
  7.         parameters.put("SUBREPORT_DIR", getServletContext().getRealPath(  
  8.                 "/jasper"));  
  9.         JRDataSource dataSource = new JRBeanCollectionDataSource(resumeInfo);  
  10.         JasperReport report = JasperCompileManager.compileReport(jrxmlPath);  
  11.         JasperPrint jasperPrint = JasperFillManager.fillReport(report,  
  12.                 parameters, dataSource);  
  13.         HttpServletResponse response = ServletActionContext.getResponse();  
  14.         OutputStream ouputStream = response.getOutputStream();  
  15.         // 设置相应参数,以附件形式保存PDF  
  16.         response.setContentType("application/pdf");  
  17.         response.setCharacterEncoding("UTF-8");  
  18.         response.setHeader("Content-Disposition""attachment; filename=\""  
  19.                 + URLEncoder.encode(getLoginUserRealName() + "的个人简历""UTF-8")  
  20.                 + ".pdf\"");  
  21.         // 使用JRPdfExproter导出器导出pdf  
  22.         JRPdfExporter exporter = new JRPdfExporter();  
  23.         exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);  
  24.         exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);  
  25.         exporter.exportReport();// 导出  
  26.         ouputStream.close();// 关闭流  
  27.         return null;  
  28.     }  


    JRDataSource可以有很多中类型,这里使用的是JRBeanCollectionDataSource,参数是Collection类型的,那么使用List封装数据库操作提取的结果即可。这里使用Spring提供的JdbcTemplate对象的queryForList方法获取结果。 

Java代码  收藏代码
  1. public List getResumeForDataSource(Integer empId) {  
  2.         return jt.queryForList(SQL_GET_RESUME_FOR_DATASOURCE,  
  3.                 new Object[] { empId });  
  4.     }  


    只需传入SQL语句,就是我们在iReport中写的那个,然后加让where子句获取单一记录即可。而要获取Excel,就把生成PDF部分的代码替换为: 

Java代码  收藏代码
  1. // 设置相应参数,以附件形式保存XLS  
  2.         response.setContentType("application/vnd.excel");  
  3.         response.setCharacterEncoding("UTF-8");  
  4.         response.setHeader("Content-Disposition""attachment; filename=\""  
  5.                 + URLEncoder.encode(getLoginUserRealName() + "的个人简历""UTF-8")  
  6.                 + ".xls\"");  
  7.         // 使用JRXlsExporter导出器导出xls  
  8.         JRXlsExporter exporter = new JRXlsExporter();  
  9.         exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);  
  10.         exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);  
  11.         exporter.exportReport();// 导出  
  12.         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有深入研究的欢迎交流。

 

出处 : http://sarin.iteye.com/blog/658145/

分享到:
评论

相关推荐

    JasperReport中文翻译用户手册.pdf

    通过这个中文翻译用户手册,新手可以系统地学习JasperReport的基本概念、设计原理和使用方法,逐步掌握如何创建模板、设置数据源、定义参数、样式控制、图表制作以及报表的导出和交互操作。手册中会详细解释每个步骤...

    jasperreport+ireport开发java报表入门级教程

    本教程旨在详细介绍如何使用iReport工具来制作报表的过程,特别适用于初学者。网络上虽然有许多关于使用iReport和JasperReport的文章,但很少有文章能够全面地介绍iReport的使用方法。本教程的目标是为开发者提供一...

    JasperReport 学习之路

    9. **Jasper**:展示分组分栏报表的制作过程,通过两次分组实现复杂的布局。 10. **JCharts**:类似Chart示例,但使用另一个开源API jCharts生成图形。 11. **Landscape**:展示横向报表的设计方法。 12. **...

    JasperReport使用手冊

    虽然网络上有不少关于 iReport 和 JasperReport 的资料,但鲜有文献能够全面地指导初学者如何从零开始制作报表。本章节将重点放在 iReport 的实际操作流程上,以满足那些希望直接获得实践经验的读者需求。 ##### ...

    jasperReport学习文档资料.rar

    这些文档覆盖了JasperReports和iReport的各个方面,无论是初学者还是经验丰富的开发者,都能从中找到所需的知识点,进一步提升报表设计和开发能力。通过学习这些资料,你将能够熟练地利用JasperReports创建各种类型...

    ireport3.0.0制作报表入门视频,

    【标题】:“ireport3.0.0制作报表入门视频” 在IT行业中,报表系统是数据分析和业务展示的重要工具,而ireport作为JasperReports的一部分,是一款强大的报表设计工具,尤其适用于Java环境。本视频教程专注于...

    jasperreport中文资料——梧桦椰枫(收集).zip

    **使用iReport制作报表的详细过程**:iReport是JasperReport的图形化设计工具,允许用户通过拖放方式创建复杂的报表布局。这些教程详细解释了如何使用iReport,从新建报表到添加字段、设置样式,直至生成最终的PDF或...

    IReport报表制作详解

    【IReport报表制作详解】 IReport是一款开源的报表设计工具,它是JasperReports库的一部分,主要用于设计复杂的报表模板。这款工具允许用户通过直观的图形界面创建、编辑和管理报表,无需编写任何代码,大大简化了...

    (六)Ireport制作一个规范的报表,处理数据格式

    jrxml是JasperReport的XML格式,包含了报表的所有布局和样式信息。使用IReport打开这个文件,我们可以看到预定义的字段、样式和计算逻辑。通过修改jrxml文件,我们可以定制报表的外观和行为,比如添加新的数据列、...

    Ireport教程(共三个)

    通过这个教程,初学者可以快速理解Ireport的基本工作流程,并熟练掌握报表设计的基本技巧。 最后,《jasperreport+ireport开发java报表入门级教程》将深入到JasperReport的使用,JasperReport是一个强大的报表引擎...

    java+ireport报表开发实例

    Java与iReport报表开发实例详解 Java是一种广泛使用的编程语言,尤其在企业级应用开发中占据主导地位。...《iReport图文教程.pdf》文件应包含更多详细步骤和示例,对于初学者来说是很好的学习资源。

    ireport入门指南

    JasperReport是iReport用来制作报表的一个核心组件。作为一个报表生成库,JasperReport支持广泛的输出格式,如PDF、Excel、HTML和CSV等。它是完全开放源代码的,并且拥有大量的用户和社区支持。JasperReport通过XML...

    ireport学习资料

    “JasperReports结合iReport制作报表教程.rar”则专门针对ireport和JasperReports的协同工作,提供了详细的教程,帮助开发者学习如何利用这两个工具创建和管理报表,包括数据源的连接、SQL查询、样式设置、图表制作...

    IReport导出模板制作步骤

    这个教程主要针对初学者,旨在帮助他们理解如何通过IReport来制作模板,特别适用于那些对IReport使用感到困惑的用户。 首先,启动IReport的步骤非常简单,只需双击已安装的IReport.exe图标。然后,通过“文件”菜单...

    ireport与java 桌面应用,web应用

    - "JasperReports+ireports制作PDF报表.pdf"可能详细讲解了如何使用ireport设计PDF报表,并可能包含示例代码和步骤。 - "JasperReport.pdf"可能涵盖JasperReports库的基础知识和高级特性。 - "JasperReports+3.5+for...

    ireport+jasperreports的报表

    JasperReports是一个功能强大的报表制作工具,它允许用户根据特定的规则编写XML文件,从而生成多种格式的输出文件,例如PDF、HTML、XML、XLS等。iReport则是JasperReports的一个图形化设计工具,简化了XML文件的创建...

    jasperreports 使用教程资料

    其次,《jasperReport_4.5-4-6版本通用报表制作教程.docx》是一个版本跨度较大的教程,涵盖了从 4.5 到 4.6 的多个版本。这个教程可能会详细介绍如何使用 iReport 设计报表模板,设置样式、字段和数据集,以及如何在...

Global site tag (gtag.js) - Google Analytics