33559 www.bilibili.com/video/b v1 ty 4y 1a 77 u? p=1(经典IDEA版Java项目医疗实战-传智健康) )。
java典型的PDF格式报告的导出通常有两种格式。
1.iText iText是用于生成PDF文档的java类库。 除了可以生成PDF或rtf文档外,还可以使用iText将XML和Html文件转换为PDF文件。 安装iText非常方便,下载iText.jar文件后,只需将iText.jar路径添加到系统的CLASSPATH中,即可在程序中使用iText类库。
实施POM.XML : dependencygroupidcom.low agie/groupidartifactiditext/artifactidversion2.1.7/version/dependency document.open (; 文档. add (new paragraph (hello itext ) ); document.close (; } catch (文件格式扩展跟踪) { e.printStackTrace ); } catch (文档扩展) { e.printStackTrace ); } } 2. JasperReports JasperReports可以转换PDF、HTML或XML格式,通常与Jaspersoft Studio (模板设计器)结合使用以导出PDF报告
POM.XML : dependencygroupidnet.SF.jasperreports/groupidartifactidjasperreports/artifactidversion6.4.0/version
public void test ((stringjrxmlpath=' d : ) idea projects (.src\ mainresources\ demo.) ) srcmar string jasperpath=' d :\ idea projects\ .src\ main\ resourcesdemo.jasper '; //编译模板jaspercompilemanager.compilereporttofile (jrxml path,jasperPath )//结构数据HashMap paramters=new HashMap paramters.put (报告日期,(2021-06-16 ) ); paramters.put(company,) xuyu ); ArrayList maplist=newarraylistmap (; 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; //填充数据的jasperpathjasperprint=jasper file manager.fill report (jasper path,paramters,newjrbeancollectiondatasource (ler ) ) //输出文件stringpdfpath=' d :\ test.pdf '; jasperexportmanager.exportreporttopdffile (jasper print,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); } 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目录下
@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); } }}