有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将两个jrxml jasper报告合并到一个pdf页面

我试图从这个网站上找到答案,将两个jrxml jasper合并成一个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) 个答案

  1. # 1 楼答案

    你也可以考虑使用<强>部分<强>来组成报告。但我不确定这会带来什么好处或坏处。也许这可以解决一些页码问题

    报表可以呈现一组条带或部分(选择一个):

    • 条带根据其拆分样式填充页面

    • 每个部分都由一定数量的页面组成

  2. # 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);
       }
    }
    

    此代码将在jasperPrint1的第1页中添加jasperPrint2(在其所有页面中)的所有元素

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

  3. # 3 楼答案

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