当前位置:   article > 正文

java-spring PDF报表生成方式_java导出pdf生成报表

java导出pdf生成报表

https://www.bilibili.com/video/BV1Ty4y1a77U?p=1(经典IDEA版Java项目医疗实战-传智健康)

java常见的PDF形式报表导出一般有两种形式:

1.iText

    iText是用关于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML,Html文件转化为PDF文件。iText的安装非常方便,下载iText.jar文件后,只需要在系统的CLASSPATH中加入iText.jar路径,在程序中就可以使用iText类库了。

  1. pom.xml:
  2. <dependency>
  3. <groupId>com.lowagie</groupId>
  4. <artifactId>itext</artifactId>
  5. <version>2.1.7</version>
  6. </dependency>
  7. 实现:
  8. public static void main(String[] args) {
  9. try {
  10. Document document = new Document();
  11. pdfWrite.getInstance(document, new FileOutputStream("D:\\test.pdf"));
  12. document.open();
  13. document.add(new Paragraph("hello itext"));
  14. document.close();
  15. } catch (FileNotFoundException e) {
  16. e.printStackTrace();
  17. } catch (DocumentException e) {
  18. e.printStackTrace();
  19. }
  20. }

2. JasperReports

    JasperReports能转换PDF,HTML,或者XML格式,一般会结合Jaspersoft Studio(模板设计器)使用导出PDF报表。

  1. pom.xml:
  2. <dependency>
  3. <groupId>net.sf.jasperreports</groupId>
  4. <artifactId>jasperreports</artifactId>
  5. <version>6.4.0</version>
  6. </dependency>

    创建jrxml文件,类似于framemark模板文件。(见下文)

  1. public void test(){
  2. String jrxmlPath = "D:\\ideaProjects\\...\\src\\main\\resources\\demo.jrxml";
  3. String jasperPath = "D:\\ideaProjects\\...\\src\\main\\resources\\demo.jasper";
  4. //编译模板
  5. JasperCompileManager.compileReportToFile(jrxmlPath,jasperPath);
  6. //构造数据
  7. HashMap paramters = new HashMap();
  8. paramters.put("reportDate","2021-06-16");
  9. paramters.put("company","xuyu");
  10. ArrayList<Map> list = new ArrayList<Map>();
  11. HashMap map1 = new HashMap();
  12. map1.put("name","xuyu");
  13. map1.put("address","xian");
  14. HashMap map2 = new HashMap();
  15. map2.put("name","xuyu");
  16. map2.put("address","xian");
  17. list.add(map1);
  18. list.add(map2);
  19. //填充数据
  20. JasperPath jasperPrint = JasperFileManager.fillReport(jasperPath,paramters,new JRBeanCollectionDataSource(list));
  21. //输出文件
  22. String pdfPath = "D:\\test.pdf";
  23. JasperExportManager.exportReportToPdfFile(jasperPrint,pdfPath);
  24. }
  1. //基于数据库方式填充数据
  2. public void test1() throws ClassNotFoundException {
  3. Class.forName("com.mysql.jdbc.Driver");
  4. Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/health",root,root);
  5. String jrxmlPath = "D:\\ideaProjects\\...\\src\\main\\resources\\demo.jrxml";
  6. String jasperPath = "D:\\ideaProjects\\...\\src\\main\\resources\\demo.jasper";
  7. //模板编译,编译为后缀为jasper的二进制文件
  8. JasperCompileManager.compileReportToFile(jrxmlPath,jasperPath);
  9. //构造数据
  10. Map paramters = new HashMap();
  11. paramters.put("company","xuyu");
  12. //填充数据
  13. JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath,paramters,connection);
  14. //输出文件
  15. String pdfPath="D:\\test.pdf";
  16. JasperExportManager.exportReportToPdfFile(jasperPrint,pdfPath);
  17. }

    JasperReport原理:

        JRXML->Jasper->Jrprint->Exporter->PDF/HTML/XML

        JRXML:报表填充模板,本质是一个xml文件

        Jasper:由JRXML模板编译成的二进制文件,用于代码填充数据

        Jrprint:当用数据填充完Jasper后生成的对象,用于输出报表

        Exporter:报表输出的管理类,可以指定要输出的报表为何种格式

        PDF/HTML/XML:报表形式

    JasperReports到处pdf报表开发流程:

        1.制作报表模板

        2.模板编译

        3.构造数据

        4.填充数据

        5.输出文件

    模板设计器Jaspersoft Studio:

        为一个图形化的报表设计工具,可以非常方便的设计出PDF报表模板文件(其实就是一个xml文件),再结合JasperReports使用,就可以渲染出PDF文件。

        下载地址:https://community.jaspersoft.com/commounity-download

        具体的软件使用详见百度。

    结合JasperReports输出报表:

        使用Jaspersoft Studio设计好模板(一个使用JDBC数据源,一个使用JavaBean数据源方式进行数据填充)(见上面代码)后,结合JasperReports完成报表输出。

        注意:以上方式中文无法正常显示,需要修复:

        在Jaspersoft Studio中打开对应的jrxml文件,选中中文相关元素,统一将字体设置为“华文宋体”并将修改后的jrxml文件重新复制到项目中,字体需导入相关字体库

    在spring项目中使用JasperReports:

    1.把jrxml文件放到resources目录下

    2.导入maven坐标(见上面)

    3.将解决中文乱码的文件复制到resources目录下

  1. @RestController
  2. @RequestMapping("/report")
  3. public class PDFController {
  4. @Autowired
  5. private ReportService reportService;
  6. //导出PDF文件
  7. @RequestMapping("/exportBusinessReport")
  8. public Result exportReportToPdfFile(HttpServletRequest request, HttpServletResponse response){
  9. try {
  10. //取出返回结果数据,准备将报表数据写入到PDF文件中
  11. Map<String, Object> result = reportService.getBusinessReportData();
  12. List<Map> hotSetmeal = (List<Map>) result.get("hotSetmeal");
  13. //动态获取模板文件绝对磁盘路径
  14. String jrxmlPath = request.getSession().getServletContext().getRealPath("template") + File.separator + "xxx.jrxml";
  15. String jasperPath = request.getSession().getServletContext().getRealPath("template") + File.separator + "xxx.jasper";
  16. //编译模板
  17. JasperCompileManager.compileReportToFile(jrxmlPath, jasperPath);
  18. //填充数据
  19. JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath, result, new JRBeanCollectionDataSource(hotSetmeal));
  20. ServletOutputStream out = response.getOutputStream();
  21. response.setContentType("application/pdf");
  22. response.setHeader("content-Disposition", "attachment;filename=report.pdf");
  23. //输出文件
  24. JasperExportManager.exportReportToPdfStream(jasperPrint, out);
  25. return null;
  26. }catch (Exception e){
  27. e.printStackTrace();
  28. return new Result(false, MessageConstant.OPER_FAILD);
  29. }
  30. }
  31. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/617101
推荐阅读
相关标签
  

闽ICP备14008679号