Jasper Report:多个Jasper文件合并(跨页和不跨页)

当需要将多份数据展示在同一个报表中时,可采用报表合并的方式:

情况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版权协议,转载请附上原文出处链接和本声明。