分享

jasperreport+jaspersoft生成报表并集成到spring boot中

 WindySky 2017-12-04

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

后来经同事推荐找到了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

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

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

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

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

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

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

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

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

没有找到想要的结果。

  1. /** 
  2.  * 返回iReport报表视图 
  3.  * @param model 
  4.  * @return 
  5.  */  
  6. @RequestMapping(value = "/report", method = RequestMethod.GET)  
  7. public String report(Model model) {  
  8.     // 报表数据源  
  9.     JRDataSource jrDataSource = new JRBeanCollectionDataSource(JavaBeanPerson.getList());  
  10.       
  11.     // 动态指定报表模板url  
  12.     model.addAttribute("url", "/WEB-INF/jasper/MvcIReportExample.jasper");  
  13.     model.addAttribute("format", "pdf"); // 报表格式  
  14.     model.addAttribute("jrMainDataSource", jrDataSource);  
  15.       
  16.     return "iReportView"; // 对应jasper-defs.xml中的bean id  
  17. }  

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

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

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

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

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

的实现,如下图:


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

  1. package com.pes_soft.example;  
  2.   
  3. import java.sql.ResultSet;  
  4. import java.sql.SQLException;  
  5. import java.sql.Statement;  
  6. import java.text.DateFormat;  
  7. import java.util.Date;  
  8. import java.util.Locale;  
  9.   
  10. import net.sf.jasperreports.engine.JRDataSource;  
  11. import net.sf.jasperreports.engine.JRResultSetDataSource;  
  12. import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;  
  13.   
  14. import org.slf4j.Logger;  
  15. import org.slf4j.LoggerFactory;  
  16. import org.springframework.stereotype.Controller;  
  17. import org.springframework.ui.Model;  
  18. import org.springframework.web.bind.annotation.RequestMapping;  
  19. import org.springframework.web.bind.annotation.RequestMethod;  
  20.   
  21. import com.pes_soft.example.datasource.JdbcConnectionProvider;  
  22. import com.pes_soft.example.model.JavaBeanPerson;  
  23.   
  24. /** 
  25.  * Handles requests for the application home page. 
  26.  */  
  27. @Controller  
  28. public class HomeController {  
  29.       
  30.     private static final Logger logger = LoggerFactory.getLogger(HomeController.class);  
  31.     private static final String queryStr = "打开jrxml文件找你的sql查询语句到这里";  
  32.   
  33.     /** 
  34.      * Simply selects the home view to render by returning its name. 
  35.      */  
  36.     @RequestMapping(value = "/", method = RequestMethod.GET)  
  37.     public String home(Locale locale, Model model) {  
  38.         logger.info("Welcome home! The client locale is {}.", locale);  
  39.           
  40.         Date date = new Date();  
  41.         DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);  
  42.           
  43.         String formattedDate = dateFormat.format(date);  
  44.           
  45.         model.addAttribute("serverTime", formattedDate );  
  46.           
  47.         return "home";  
  48.     }  
  49.       
  50.     /** 
  51.      * 返回iReport报表视图 
  52.      * @param model 
  53.      * @return 
  54.      */  
  55.     @RequestMapping(value = "/report", method = RequestMethod.GET)  
  56.     public String report(Model model) {  
  57.         // 报表数据源  
  58.         JRDataSource jrDataSource = new JRBeanCollectionDataSource(JavaBeanPerson.getList());  
  59.           
  60.         // 动态指定报表模板url  
  61.         model.addAttribute("url", "/WEB-INF/jasper/MvcIReportExample.jasper");  
  62.         model.addAttribute("format", "pdf"); // 报表格式  
  63.         model.addAttribute("jrMainDataSource", jrDataSource);  
  64.           
  65.         return "iReportView"; // 对应jasper-defs.xml中的bean id  
  66.     }  
  67.       
  68.     /** 
  69.      * 返回iReport报表视图,支持PDF显示中文 
  70.      * @param model 
  71.      * @return 
  72.      */  
  73.     @RequestMapping(value = "/reportChs", method = RequestMethod.GET)  
  74.     public String reportChs(Model model) {  
  75.         // 报表数据源  
  76.         JRDataSource jrDataSource = new JRBeanCollectionDataSource(JavaBeanPerson.getListChs());  
  77.                   
  78.         // 动态指定报表模板url  
  79.         model.addAttribute("url", "/WEB-INF/jasper/MvcIReportChsExample.jasper");  
  80.         model.addAttribute("format", "pdf"); // 报表格式  
  81.         model.addAttribute("jrMainDataSource", jrDataSource);  
  82.           
  83.         return "iReportView";  
  84.     }  
  85.       
  86.     /** 
  87.      * 用jdbc为数据源,查询?表 
  88.      * @param model 
  89.      * @return 
  90.      */  
  91.     @RequestMapping(value = "/jdbcUser", method = RequestMethod.GET)  
  92.     public String reportJdbcUser(Model model) {  
  93.         try {  
  94.             // 报表数据源  
  95.             Statement stmt = JdbcConnectionProvider.getConnection()  
  96.                     .createStatement();  
  97.             //JdbcConnectionProvider为前面建立的mysql连接文件  
  98.             ResultSet rs = stmt.executeQuery(queryStr);//执行query语句得到结果  
  99.             JRDataSource jrDataSource = new JRResultSetDataSource(rs);  
  100.   
  101.             // 动态指定报表模板url  
  102.             model.addAttribute("url", "/WEB-INF/jasper/?.jasper");  
  103.             //填入你的模板文件  
  104.             model.addAttribute("format", "pdf"); // 报表格式  
  105.             model.addAttribute("jrMainDataSource", jrDataSource);  
  106.         } catch (SQLException e) {  
  107.             // TODO Auto-generated catch block  
  108.             e.printStackTrace();  
  109.         }  
  110.         return "iReportView";  
  111.     }  
  112. }  

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

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

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多