1.根据需求画出ireport模板
2.生成pdf方法,两种生成方式:根据jrxml文件,或者根据jasper文件
/**
* 根据ireport模板生成pdf
*
* @param param
* @param data
* @return
*/
private byte[] reportPdf(HashMap<String, Object> param, List<Object> data) {
InputStream input;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
// ClassPathResource classPathResource = new ClassPathResource("/templates/ireport/template.jrxml");
ClassPathResource classPathResource = new ClassPathResource("/templates/ireport/template.jasper");
input = classPathResource.getInputStream();
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(data);
// 根据jrxml生成
// JasperReport jasperReport = JasperCompileManager.compileReport(input);
// 根据jasper生成
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(input);
JasperPrint jasperPrint;
jasperPrint = JasperFillManager.fillReport(jasperReport, param, dataSource);
JRAbstractExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);
exporter.exportReport();
return outputStream.toByteArray();
} catch (JRException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
3.业务数据设值完成后,调用上面的方法,返回byte[]