如何将两个jrxml jasper报告合并为1 pdf同一页面

时间:2015-12-18 10:17:56

标签: java pdf jasper-reports

我尝试从这个网站回答将两个jrxml jasper合并为1个pdf文件。创建的文件包含两个页面...

如何将两个jrxml合并到一个页面中?

JasperPrint jasperPrint1 = JasperFillManager.fillReport(getClass().getResourceAsStream("/coba.jasper"), param, new JREmptyDataSource());
JasperPrint jasperPrint2 = JasperFillManager.fillReport(getClass().getResourceAsStream("/coba2.jasper"), param2, new JREmptyDataSource());

            List pages = jasperPrint2.getPages();
            for (int i = 0; i < pages.size(); i++) {
                JRPrintPage object = (JRPrintPage)pages.get(i);
                jasperPrint1.addPage(object);
            }                                   
JRExporter exporter = new JRPdfExporter();
            exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, jasper);
            OutputStream output = new FileOutputStream(new File("d:\\demo.pdf"));
            exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, output);
            exporter.exportReport();

3 个答案:

答案 0 :(得分:2)

这是因为您要添加页面addPage,因此您需要将页面上的元素添加到另一个页面。

JRPrintPage page1 = jasperPrint1.getPages().get(0);
List<JRPrintPage> pages2 = jasperPrint2.getPages();
for (JRPrintPage page : pages2) {
   List<JRPrintElement> elements = page.getElements();
   for (JRPrintElement element : elements) {
     page1.addElement(element);
   }
}

此代码将在jasperPrint2

的第1页中添加jasperPrint1的所有元素(在其所有页面中)

注意:错误处理(NullpointerArrayIndexOutOfBounds)超出了示例的范围。

答案 1 :(得分:0)

您也可以考虑使用零件来撰写报告。我不确定这会带来什么优点或缺点。也许可以解决一些页码问题。

报告要么渲染一堆带或一部分(选择一个):

  • 乐队根据页面的拆分样式填充页面。

  • 零件每个由定义数量的页面组成。

答案 2 :(得分:0)

出于完整性考虑:另一个变体是用多个JasperPrint对象填充pdf导出器,如https://stackoverflow.com/a/24117554/647213中所述。那将是很晚的合并,因此可能无法解决页面编号问题(AFAIK)。