首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > PowerDesigner >

使用JasperReport打造PDF,Excel报表(Struts2实现)(转)

2014-01-26 
使用JasperReport制作PDF,Excel报表(Struts2实现)(转)转自:http://sarin.iteye.com/blog/658145/使用Jaspe

使用JasperReport制作PDF,Excel报表(Struts2实现)(转)
转自:http://sarin.iteye.com/blog/658145/使用JasperReport制作PDF,Excel报表(Struts2实现)博客分类:

    ?探索实践
    ??? 下一步给模板起名字,选择存放路径。下一步选择查询数据源,点击New新建,选择合适的数据连接即可,这里选择Database JDBC Connection,并选择MySQL作为数据库服务,后面的配置虽然是英文的,但是见名知义,就很简单了。?
    ??? 数据库配置完毕,就开始写SQL语句,这里不要挂where子句,只是select语句即可,不过要注意,字段名必须as重命名,否则到web应用中将会出现找不到字段的问题,如果列名太多,就耐心的一个一个写完。?
    使用JasperReport打造PDF,Excel报表(Struts2实现)(转)
    ??? 这里我已经耐心的写完了,是一个简历库,字段比较多。第四步是选取字段,当然都选过来就行了。第五步是Group By就是分组设置,如果报表中需要合并单元格之类的高级操作,那么就需要考虑合理的分组显示了,我们演示不涉及高深操作。这里是和业务挂钩的,必须开发者自行研究了。然后就Finish了,得到一个完整的工作区。?
    使用JasperReport打造PDF,Excel报表(Struts2实现)(转)
    ??? 左面是文档的结构,当前已经给我们分好了栏位,可以不全用,不需要的删除即可。中间是文档工作区,是我们创作的区域,右边是工具栏,有属性,控件等。属性工具栏提供对文档元素的控制,如大小,字体等。控件工具栏提供文档可以使用的控件,常用的是静态文本和属性文本。大家可以自行尝试使用,这里给出一个设计好的模板。?
    使用JasperReport打造PDF,Excel报表(Struts2实现)(转)?
    ??? 不需要改变的单元就是Static Text,需要动态变化的是Text Field。拖放好位置后右键Edit Expression即可修改表达式,iReport支持函数和参数定义,非常强大,支持运算,这里我们只选择已有字段的名即可。?
    ??? 设置好后,开始对中文进行处理,因为默认做好的模板是不支持中文显示的,在模板中修改字体属性,如下图。?
    使用JasperReport打造PDF,Excel报表(Struts2实现)(转)?
    ??? 这里只需设置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存放模板文件。?
    使用JasperReport打造PDF,Excel报表(Struts2实现)(转)?
    ??? 在Struts2中采用简单的处理方式,可以这样进行。?
    Java代码??使用JasperReport打造PDF,Excel报表(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方法获取结果。?
    Java代码??使用JasperReport打造PDF,Excel报表(Struts2实现)(转)
  • public?List?getResumeForDataSource(Integer?empId)?{??
  • ????????return?jt.queryForList(SQL_GET_RESUME_FOR_DATASOURCE,??
  • ????????????????new?Object[]?{?empId?});??
  • ????}??
    ??? 只需传入SQL语句,就是我们在iReport中写的那个,然后加让where子句获取单一记录即可。而要获取Excel,就把生成PDF部分的代码替换为:?
    Java代码??使用JasperReport打造PDF,Excel报表(Struts2实现)(转)
  • //?设置相应参数,以附件形式保存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目录下即可。最终我们得到的运行结果如下:?
    使用JasperReport打造PDF,Excel报表(Struts2实现)(转)

热点排行