好久没更新了,最近在研究java开源报表

JasperReports和 iReport

实际使用效果还不错,美中不足的是没有自带补空行的功能(通过给报表数据增加null值可以实现)和文字旋转(好像不支持带@的旋转字体)

不过应付日常简单报表已经绰绰有余,还是值得记录一下!!!

通过 iReport设计报表请自己学习,比较容易上手,我只贴出调用报表预览打印的相关代码

先上 pom.xml

  <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- jasperreports Start --><!-- 该包的作用完成ireport中Preview按扭功能。通过该包可以通过java来ireport生成摸班(.jrxml或.jasper)填充数据源并导出pdf,excel,html等格式文件 --><dependency><groupId>net.sf.jasperreports</groupId><artifactId>jasperreports</artifactId><version>6.10.0</version></dependency><dependency><!-- 生成pdf所依赖的包 --><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.4.3</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-pdfa</artifactId><version>5.4.3</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency><!--将.jrxml编译成.jasper.如果你不使用java编译,而使用ireport工具编译则无须导入该 包  --><dependency><groupId>org.codehaus.groovy</groupId><artifactId>groovy-all</artifactId><version>2.4.13</version></dependency><!-- jasperreports End --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><!-- 报表导出Excle所需的包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">dependency</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">groupId</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>org.springframework.boot<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">groupId</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">artifactId</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>spring-boot-starter-test<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">artifactId</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">scope</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>test<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">scope</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">exclusions</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">exclusion</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">groupId</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>org.junit.vintage<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">groupId</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">artifactId</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>junit-vintage-engine<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">artifactId</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">exclusion</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">exclusions</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">dependency</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">dependencies</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>

使用jdbc数据源示例

不带参数

 1     @RequestMapping("/report2")2     public void createtopdf(HttpServletRequest request, HttpServletResponse response) throws Exception {3         Resource resource = new ClassPathResource("templates/report2.jasper");4         FileInputStream fis = new FileInputStream(resource.getFile());5         ServletOutputStream os = response.getOutputStream();6         try {7             Map parameters = new HashMap<>();8             Connection conn = getConnection();9             JasperPrint print = JasperFillManager.fillReport(fis, parameters, conn);
10             JasperExportManager.exportReportToPdfStream(print, os);
11         } catch (JRException e) {
12             e.printStackTrace();
13         } finally {
14             os.flush();
15         }
16     }
17    /**
18      * 返回一个mysql的数据连接对象
19      *
20      * @return
21      * @throws Exception
22      */
23     public Connection getConnection() {
24         String url = "jdbc:mysql://localhost:3306/xxxx?serverTimezone=UTC";
25         try {
26             Class.forName("com.mysql.cj.jdbc.Driver");
27             Connection conn = DriverManager.getConnection(url, "root", "root");
28             return conn;
29         } catch (ClassNotFoundException e) {
30             e.printStackTrace();
31         } catch (SQLException e) {
32             e.printStackTrace();
33         }
34         return null;
35     }

带有参数可以进行数据筛选的

设计报表时设置相应的参数如下

核心代码如下:

    /*** 可以带有参数筛选的JDBC连接源填充** @param request* @param response* @param params* @throws Exception*/@RequestMapping("/params")public void createpdf33(HttpServletRequest request, HttpServletResponse response, String params) throws Exception {Resource resource = new ClassPathResource("templates/hasparams.jasper");FileInputStream fis = new FileInputStream(resource.getFile());ServletOutputStream os = response.getOutputStream();try {Map<String, Object> parameters = new HashMap<>();parameters.put("id", params);Connection conn = getConnection();JasperPrint print = JasperFillManager.fillReport(fis, parameters, conn);JasperExportManager.exportReportToPdfStream(print, os);} catch (JRException e) {e.printStackTrace();} finally {os.flush();}}

使用javabean作为数据源填充数据调用示例:

    /*** 使用javabean填充数据** @param request* @param response* @throws Exception*/@RequestMapping("/bean2")public void javabeantest222(HttpServletRequest request, HttpServletResponse response) throws Exception {Resource resource = new ClassPathResource("templates/bean2.jasper");FileInputStream fis = new FileInputStream(resource.getFile());ServletOutputStream os = response.getOutputStream();try {Map<String, Object> parameters = new HashMap<>();List<SysUser> list = getuser();JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);

// Connection conn = getConnection();
JasperPrint print = JasperFillManager.fillReport(fis, parameters, ds);
JasperExportManager.exportReportToPdfStream(print, os);
} catch (JRException e) {
e.printStackTrace();
} finally {
os.flush();
}
}

使用LIst<Map<String,Object>>填充数据调用方式:

    /*** 使用List<Map<String,Object>>集合填充数据** @param request* @param response* @throws Exception*/@RequestMapping("/testmap")public void testmapcollection(HttpServletRequest request, HttpServletResponse response) throws Exception {Resource resource = new ClassPathResource("templates/javabean.jasper");FileInputStream fis = new FileInputStream(resource.getFile());ServletOutputStream os = response.getOutputStream();try {Map<String, Object> parameters = new HashMap<>();List<Map<String, Object>> list = getMapmodel();System.out.println(list.toString());JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
//            Connection conn = getConnection();JasperPrint print = JasperFillManager.fillReport(fis, parameters, ds);String filename = "javabean";response.setContentType("application/pdf");
//            response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8") + ".pdf");JasperExportManager.exportReportToPdfStream(print, os);} catch (JRException e) {e.printStackTrace();} finally {os.flush();}}

使用HTML方式预览报表调用代码:

    /*** 预览html格式** @param request* @param response* @throws Exception*/@RequestMapping("/html")public void testhtml(HttpServletRequest request, HttpServletResponse response) throws Exception {Resource resource = new ClassPathResource("templates/javabean.jasper");FileInputStream fis = new FileInputStream(resource.getFile());ServletOutputStream os = response.getOutputStream();try {Map<String, Object> parameters = new HashMap<>();List<Map<String, Object>> list = getMapmodel();JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
//            Connection conn = getConnection();JasperPrint print = JasperFillManager.fillReport(fis, parameters, ds);
//            JasperExportManager.exportReportToPdfStream(print,os);JasperExportManager.exportReportToHtmlFile(print, request.getServletContext().getRealPath("/") + "test.html");response.sendRedirect("test.html");} catch (JRException e) {e.printStackTrace();} finally {os.flush();}}

在服务器端批量转成word代码示例:

    /*** 在服务器端批量导出生成word文件,可以一次性导出多个JasperPrint* @param request* @param response* @throws Exception*/@RequestMapping("/report.doc")public void testword(HttpServletRequest request, HttpServletResponse response) throws Exception {Resource resource = new ClassPathResource("templates/javabean.jasper");FileInputStream fis = new FileInputStream(resource.getFile());ServletOutputStream os = response.getOutputStream();try {Map<String, Object> parameters = new HashMap<>();List<Map<String, Object>> list = getMapmodel();JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
//            Connection conn = getConnection();JasperPrint print = JasperFillManager.fillReport(fis, parameters, ds);
//            JasperExportManager.exportReportToPdfStream(print,os);
//            JasperExportManager.exportReportToHtmlFile(print, request.getServletContext().getRealPath("/") + "test.html");
//            response.sendRedirect("test.html");JRDocxExporter exporter = new JRDocxExporter();List<JasperPrint> plist = new ArrayList<>();plist.add(print);exporter.setExporterInput(SimpleExporterInput.getInstance(plist));exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(new File("D:/javabean.doc")));exporter.exportReport();
        System.out.println(</span>"批量导出word文件成功"<span style="color: rgba(0, 0, 0, 1)">);} </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (JRException e) {e.printStackTrace();} </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {os.flush();}
}</span></pre>

直接使用 .jrxml模板先进行代码编译然后调用示例:

    /*** 把jrxml文件编译成 jrasper文件,之后填充数据* @param request* @param response* @throws IOException* @throws SQLException*/@RequestMapping("/compile")public void Compilejrxml(HttpServletRequest request,HttpServletResponse response)throws IOException,SQLException {String path = "D:\\Idea Projects\\jasper\\src\\main\\resources\\templates\\report6.jrxml";File  file = new File(path);String parentPath = file.getParent();String jrxmlDestSourcePath = parentPath+"/report9.jasper";try {JasperCompileManager.compileReportToFile(path,jrxmlDestSourcePath);} catch (JRException e) {e.printStackTrace();}File jfile = new File(parentPath+"\\report9.jasper");
    FileInputStream fis </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> FileInputStream(jfile);ServletOutputStream os </span>=<span style="color: rgba(0, 0, 0, 1)"> response.getOutputStream();</span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {Map</span>&lt;String, Object&gt; parameters = <span style="color: rgba(0, 0, 255, 1)">new</span> HashMap&lt;&gt;<span style="color: rgba(0, 0, 0, 1)">();List</span>&lt;Map&lt;String, Object&gt;&gt; list =<span style="color: rgba(0, 0, 0, 1)"> getMapmodel11();System.out.println(list.toString());JRBeanCollectionDataSource ds </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> JRBeanCollectionDataSource(list);JasperPrint print </span>=<span style="color: rgba(0, 0, 0, 1)"> JasperFillManager.fillReport(fis, parameters, ds);JasperExportManager.exportReportToPdfStream(print, os);} </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (JRException e) {e.printStackTrace();} </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {os.flush();}
}</span></pre>

报表生成pdf并在客户端下载示例:

    /*** 下载报表pdf格式* @param request* @param response* @throws Exception*/@RequestMapping("/downloadpdf")public void testmapcollection1234(HttpServletRequest request, HttpServletResponse response) throws Exception {Resource resource = new ClassPathResource("templates/javabean.jasper");FileInputStream fis = new FileInputStream(resource.getFile());ServletOutputStream os = response.getOutputStream();try {Map<String, Object> parameters = new HashMap<>();List<Map<String, Object>> list = getMapmodel();System.out.println(list.toString());JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);JasperPrint print = JasperFillManager.fillReport(fis, parameters, ds);response.setContentType("application/pdf");response.setCharacterEncoding("UTF-8");String filename = "javabean";response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8") + ".pdf");JRPdfExporter exporter = new JRPdfExporter();exporter.setExporterInput(new SimpleExporterInput(print));exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(os));SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();exporter.setConfiguration(configuration);exporter.exportReport();} catch (JRException e) {e.printStackTrace();} finally {os.flush();}}

报表生成Excel并下载至客户端代码:

    /*** 报表下载xls格式* @param request* @param response* @throws Exception*/@RequestMapping("/downloadxls")public void testmapcollection12342(HttpServletRequest request, HttpServletResponse response) throws Exception {Resource resource = new ClassPathResource("templates/javabean.jasper");FileInputStream fis = new FileInputStream(resource.getFile());ServletOutputStream os = response.getOutputStream();try {Map<String, Object> parameters = new HashMap<>();List<Map<String, Object>> list = getMapmodel();System.out.println(list.toString());JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);JasperPrint print = JasperFillManager.fillReport(fis, parameters, ds);response.setContentType("application/xls");response.setCharacterEncoding("UTF-8");String filename = "javabean";response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8") + ".xls");JRXlsExporter exporter = new JRXlsExporter();exporter.setExporterInput(new SimpleExporterInput(print));exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(os));SimpleXlsExporterConfiguration configuration = new SimpleXlsExporterConfiguration();exporter.setConfiguration(configuration);exporter.exportReport();} catch (JRException e) {e.printStackTrace();} finally {os.flush();}}

报表生成word格式并下载至客户端代码示例:

    /*** 报表下载word(DOC)格式* @param request* @param response* @throws Exception*/@RequestMapping("/downloadword")public void testmapcollection1232342(HttpServletRequest request, HttpServletResponse response) throws Exception {Resource resource = new ClassPathResource("templates/javabean.jasper");FileInputStream fis = new FileInputStream(resource.getFile());ServletOutputStream os = response.getOutputStream();try {Map<String, Object> parameters = new HashMap<>();List<Map<String, Object>> list = getMapmodel();System.out.println(list.toString());JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);JasperPrint print = JasperFillManager.fillReport(fis, parameters, ds);response.setContentType("application/ms-word");response.setCharacterEncoding("UTF-8");String filename = "javabean";response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8") + ".doc");JRDocxExporter exporter = new JRDocxExporter();exporter.setExporterInput(new SimpleExporterInput(print));exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(os));SimpleDocxExporterConfiguration configuration = new SimpleDocxExporterConfiguration();exporter.setConfiguration(configuration);exporter.exportReport();
    } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (JRException e) {e.printStackTrace();} </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {os.flush();}
}</span></pre>

JasperReports生成的PDF报表会存在中文显示的问题,需要自行设置字体

处理如下

在项目的 resources文件夹下新建文件:

fonts.xml

jasperreports_extension.properties

然后下载ttf的字体文件,放在同级目录下,我下载的时 STSong.ttf 即为宋体

fonts.xml如下

<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies><fontFamily name="仿宋"><normal>STSONG.TTF</normal><bold>STSONG.TTF</bold><italic>STSONG.TTF</italic><boldItalic>STSONG.TTF</boldItalic><pdfEncoding>Identity-H</pdfEncoding><pdfEmbedded>true</pdfEmbedded><exportFonts><export key="net.sf.jasperreports.html">'仿宋', Arial, Helvetica, sans-serif</export><export key="net.sf.jasperreports.xhtml">'仿宋', Arial, Helvetica, sans-serif</export></exportFonts></fontFamily>

</fontFamilies>

jasperreports_extension.properties的内容如下

net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.lobstertwo=fonts.xml

项目的层级如下:

至此,日常简单报表应该已经能彻底满足需求了,代码也比较详细,谢谢大家,有问题可以留言(反正我也不会给你答疑哈哈哈哈)!!!

JasperReport和iReport的java集成大全相关推荐

  1. JasperReport+iReport进行java报表开发

    一  相关基础知识     1.关于JasperReport和iReport     Jasperreport是一个报表制作程序,用户需要按照它制定的规则编写一个XML文件,然后得到用户需要输出的格式 ...

  2. java 浏览器测试,【Java资源大全】Selenium:基于浏览器的测试套件

    (点击上方公号,可快速关注) 来源:http://hao.jobbole.com/ 作者:伯乐在线-唐尤华 Selenium是用于在多个平台上自动化操作浏览器的工具套件,支持多种浏览器.多种操作系统. ...

  3. 外国程序员整理的Java资料大全

    2019独角兽企业重金招聘Python工程师标准>>> 外国程序员整理的Java资料大全 博客分类: java 构建 这里搜集了用来构建应用程序的工具. Apache Maven:M ...

  4. Java资源大全中文版

    Java资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-java 就是 akullpp 发起维护的 Java 资源列表,内容 ...

  5. Java资源大全中文版-Awesome - java

    本文来自GitHub 上 Awesome - java 系列的资源整理. awesome-java是 akullpp 发起维护的 Java 资源列表,内容包括:构建工具.数据库.框架.模板.安全.代码 ...

  6. Java资源大全中文版(转)

    Java资源大全中文版(Awesome最新版) Awesome系列的Java资源整理.awesome-java 就是akullpp发起维护的Java资源列表,内容包括:构建工具.数据库.框架.模板.安 ...

  7. 【JAVA零基础入门系列】Day2 Java集成开发环境IDEA

    [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day ...

  8. 6.Java集成开发环境

    转载请保留原文链接: http://dashidan.com/article/java/basic/6.html 6.Java集成开发环境 工欲善其事, 必先利其器.--<论语·卫灵公篇> ...

  9. Groovy与Java集成常见的坑--转

    https://yq.aliyun.com/articles/2357 groovy特性 Groovy是一门基于JVM的动态语言,同时也是一门面向对象的语言,语法上和Java非常相似.它结合了Pyth ...

  10. Groovy与Java集成常见的坑

    groovy特性 Groovy是一门基于JVM的动态语言,同时也是一门面向对象的语言,语法上和Java非常相似.它结合了Python.Ruby和Smalltalk的许多强大的特性,Groovy 代码能 ...

最新文章

  1. 环回测试能够提供什么信息_以太网测试仪
  2. 运行报表时提示输入用户名和密码
  3. OpenJudge/Poj 2001 Shortest Prefixes
  4. 第十五周程序阅读-范型程序设计(4)
  5. iOS Sprite Kit教程之申请和下载证书
  6. Spring Boot 2.x基础教程:Spring Data JPA的多数据源配置
  7. mysql中数据库覆盖导入的几种方式
  8. sql alter表字段处理
  9. 免费!200块全志XR806开源鸿蒙开发板试用
  10. 聚集表(clustered table)data page中的数据行可以无序
  11. lqr算法 c语言,LQR最优控制原理介绍
  12. 信息系统开发与管理简答题、应用题和名词解释题汇总
  13. Ubuntu系统下MRIcroN、FSL6.0.5、Freesurfer7.1.1、ANTs、MRtrix3、AFNI的安装详解——核磁共振数据处理必备
  14. python pytorch语音识别_PyTorch通过ASR实现语音到文本端的模型以及pytorch语音识别(speech) - pytorch中文网...
  15. 0xC000005:Access Violation和指针强制转换问题
  16. 求1到n中与n互质的和(数论)解释及证明
  17. 从零开始的C++ opencv的人脸识别程序——第一个C++程序
  18. 如何运行android sdk sample中的单元测试
  19. 万年历显示程序C语言,C语言万年历的源程序
  20. 齐治堡垒机任意用户登录漏洞

热门文章

  1. cocos2d-x使用python创建vs模板
  2. mozilla开源项目学习----智能指针(AutoPtrAutoArrayPtr)(上)
  3. 深入理解java:线程本地变量 java.lang.ThreadLocal类
  4. html5 css练习 定位布局
  5. 自动手动安装CDH5
  6. mysql如何给一个数据库所有表都增加一个字段?
  7. 在玩图像分类和图像分割?来挑战基于 TensorFlow 的图像注解生成!
  8. 全球信息数据量陡增 大数据应用前景广阔
  9. selenium+python环境搭建
  10. Windows Phone 项目实战之账户助手