赞
踩
https://www.bilibili.com/video/BV1Ty4y1a77U?p=1(经典IDEA版Java项目医疗实战-传智健康)
java常见的PDF形式报表导出一般有两种形式:
iText是用关于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML,Html文件转化为PDF文件。iText的安装非常方便,下载iText.jar文件后,只需要在系统的CLASSPATH中加入iText.jar路径,在程序中就可以使用iText类库了。
- pom.xml:
- <dependency>
- <groupId>com.lowagie</groupId>
- <artifactId>itext</artifactId>
- <version>2.1.7</version>
- </dependency>
-
- 实现:
- public static void main(String[] args) {
- try {
- Document document = new Document();
- pdfWrite.getInstance(document, new FileOutputStream("D:\\test.pdf"));
- document.open();
- document.add(new Paragraph("hello itext"));
- document.close();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (DocumentException e) {
- e.printStackTrace();
- }
- }
JasperReports能转换PDF,HTML,或者XML格式,一般会结合Jaspersoft Studio(模板设计器)使用导出PDF报表。
- pom.xml:
- <dependency>
- <groupId>net.sf.jasperreports</groupId>
- <artifactId>jasperreports</artifactId>
- <version>6.4.0</version>
- </dependency>
创建jrxml文件,类似于framemark模板文件。(见下文)
- public void test(){
- String jrxmlPath = "D:\\ideaProjects\\...\\src\\main\\resources\\demo.jrxml";
- String jasperPath = "D:\\ideaProjects\\...\\src\\main\\resources\\demo.jasper";
-
- //编译模板
- JasperCompileManager.compileReportToFile(jrxmlPath,jasperPath);
-
- //构造数据
- HashMap paramters = new HashMap();
- paramters.put("reportDate","2021-06-16");
- paramters.put("company","xuyu");
- ArrayList<Map> list = new ArrayList<Map>();
- HashMap map1 = new HashMap();
- map1.put("name","xuyu");
- map1.put("address","xian");
- HashMap map2 = new HashMap();
- map2.put("name","xuyu");
- map2.put("address","xian");
- list.add(map1);
- list.add(map2);
-
- //填充数据
- JasperPath jasperPrint = JasperFileManager.fillReport(jasperPath,paramters,new JRBeanCollectionDataSource(list));
-
- //输出文件
- String pdfPath = "D:\\test.pdf";
- JasperExportManager.exportReportToPdfFile(jasperPrint,pdfPath);
- }
- //基于数据库方式填充数据
- public void test1() throws ClassNotFoundException {
- Class.forName("com.mysql.jdbc.Driver");
- Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/health",root,root);
-
- String jrxmlPath = "D:\\ideaProjects\\...\\src\\main\\resources\\demo.jrxml";
- String jasperPath = "D:\\ideaProjects\\...\\src\\main\\resources\\demo.jasper";
-
- //模板编译,编译为后缀为jasper的二进制文件
- JasperCompileManager.compileReportToFile(jrxmlPath,jasperPath);
-
- //构造数据
- Map paramters = new HashMap();
- paramters.put("company","xuyu");
-
- //填充数据
- JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath,paramters,connection);
-
- //输出文件
- String pdfPath="D:\\test.pdf";
- JasperExportManager.exportReportToPdfFile(jasperPrint,pdfPath);
- }
JRXML->Jasper->Jrprint->Exporter->PDF/HTML/XML
JRXML:报表填充模板,本质是一个xml文件
Jasper:由JRXML模板编译成的二进制文件,用于代码填充数据
Jrprint:当用数据填充完Jasper后生成的对象,用于输出报表
Exporter:报表输出的管理类,可以指定要输出的报表为何种格式
PDF/HTML/XML:报表形式
1.制作报表模板
2.模板编译
3.构造数据
4.填充数据
5.输出文件
为一个图形化的报表设计工具,可以非常方便的设计出PDF报表模板文件(其实就是一个xml文件),再结合JasperReports使用,就可以渲染出PDF文件。
下载地址:https://community.jaspersoft.com/commounity-download
具体的软件使用详见百度。
使用Jaspersoft Studio设计好模板(一个使用JDBC数据源,一个使用JavaBean数据源方式进行数据填充)(见上面代码)后,结合JasperReports完成报表输出。
注意:以上方式中文无法正常显示,需要修复:
在Jaspersoft Studio中打开对应的jrxml文件,选中中文相关元素,统一将字体设置为“华文宋体”并将修改后的jrxml文件重新复制到项目中,字体需导入相关字体库
1.把jrxml文件放到resources目录下
2.导入maven坐标(见上面)
3.将解决中文乱码的文件复制到resources目录下
- @RestController
- @RequestMapping("/report")
- public class PDFController {
- @Autowired
- private ReportService reportService;
-
- //导出PDF文件
- @RequestMapping("/exportBusinessReport")
- public Result exportReportToPdfFile(HttpServletRequest request, HttpServletResponse response){
- try {
- //取出返回结果数据,准备将报表数据写入到PDF文件中
- Map<String, Object> result = reportService.getBusinessReportData();
- List<Map> hotSetmeal = (List<Map>) result.get("hotSetmeal");
-
- //动态获取模板文件绝对磁盘路径
- String jrxmlPath = request.getSession().getServletContext().getRealPath("template") + File.separator + "xxx.jrxml";
- String jasperPath = request.getSession().getServletContext().getRealPath("template") + File.separator + "xxx.jasper";
-
- //编译模板
- JasperCompileManager.compileReportToFile(jrxmlPath, jasperPath);
-
- //填充数据
- JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath, result, new JRBeanCollectionDataSource(hotSetmeal));
-
- ServletOutputStream out = response.getOutputStream();
- response.setContentType("application/pdf");
- response.setHeader("content-Disposition", "attachment;filename=report.pdf");
-
- //输出文件
- JasperExportManager.exportReportToPdfStream(jasperPrint, out);
- return null;
- }catch (Exception e){
- e.printStackTrace();
- return new Result(false, MessageConstant.OPER_FAILD);
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。