当需要将多份数据展示在同一个报表中时,可采用报表合并的方式:
情况1:不跨页(即在同一页)
情况2:跨页(即另起一页)
本文介绍了如何将多个jasper报表合并到同一个pdf文件中:
常规单表代码:
JasperReport report = (JasperReport) JRLoader.loadObject(new File("D://test.jasper"));
// Get your data sources
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(new ArrayList());
// Add parameters
Map<String, Object> params = new HashMap<>();
// Fill the report
JasperPrint print = JasperFillManager.fillReport(report , params , dataSource);
// Export the report to a PDF file
JRPdfExporter exporter = new JRPdfExporter();
exporter.setExporterInput(SimpleExporterInput.getInstance(Arrays.asList(print)));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput("D://test.pdf"));
exporter.exportReport();
情景1解决方案:将part2的element加到part1中。
核心代码:
JasperReport reportPart1 = (JasperReport) JRLoader.loadObject(new File("D://p1.jasper"));
JasperReport reportPart2 = (JasperReport) JRLoader.loadObject(new File("D://p2.jasper"));
// Add parameters
Map<String, Object> params = new HashMap<>();
// Fill the report
JasperPrint printPart1 = JasperFillManager.fillReport(report1, params, new JREmptyDataSource());
JasperPrint printPart2 = JasperFillManager.fillReport(report2, params, new JRBeanCollectionDataSource(new ArrayList()));
if (printPart1.getPages().size() > 0) {
JRPrintPage part1Page= printPart1 .getPages().get(0);
for (JRPrintPage part2Page : printPart2.getPages()) {
for (JRPrintElement part2Element : part2Page.getElements()) {
part1Page.addElement(part2Element);
}
}
}
// Export the report to a PDF file
JRPdfExporter exporter = new JRPdfExporter();
exporter.setExporterInput(SimpleExporterInput.getInstance(Arrays.asList(printPart1)));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput("D://p1p2.pdf"));
exporter.exportReport();
情景2解决方案:将part2的Page加到part1中。
核心代码:
JasperReport reportPart1 = (JasperReport) JRLoader.loadObject(new File("D://p1.jasper"));
JasperReport reportPart2 = (JasperReport) JRLoader.loadObject(new File("D://p2.jasper"));
// Add parameters
Map<String, Object> params = new HashMap<>();
// Fill the report
JasperPrint printPart1 = JasperFillManager.fillReport(report1, params, new JREmptyDataSource());
JasperPrint printPart2 = JasperFillManager.fillReport(report2, params, new JRBeanCollectionDataSource(new ArrayList()));
for (JRPrintPage page : printPart2 .getPages()) {
printPart1.addPage(page);
}
// Export the report to a PDF file
JRPdfExporter exporter = new JRPdfExporter();
exporter.setExporterInput(SimpleExporterInput.getInstance(Arrays.asList(printPart1)));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput("D://p1p2.pdf"));
exporter.exportReport();
Done...
版权声明:本文为m0_37611361原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。