如何在报告中插入两个页面

时间:2014-04-18 23:49:17

标签: java jasper-reports

我遇到一个问题,我有两个jrmxl个文件。我想在一个pdf文件中加入,但每个文件都在一个页面中。

我在下面看到了一些提示,但我不知道它们是否是最好的,因为我的第一个文件有3个频段:titledetailsummary。第二个包含detailsummary

所以我想保留这种格式,如果可能的话,因为在摘要中有页面计数器。

我试过了,但我的第二页是空白的,有5厘米的高度。

列出页面=新的ArrayList<>();

for (String caminhoRelatorio : caminhoRelatorios) {
    reportPath = JasperCompileManager.compileReport(caminhoRelatorio);
    reportPage = JasperFillManager.fillReport(reportPath, parameters, ds);
    pages.add(reportPage);
}

ByteArrayOutputStream baos = new ByteArrayOutputStream();
JRPdfExporter jrPdfExporter = new JRPdfExporter();
jrPdfExporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, pages);
jrPdfExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
jrPdfExporter.setParameter(JRPdfExporterParameter.IS_CREATING_BATCH_MODE_BOOKMARKS, Boolean.TRUE);
jrPdfExporter.exportReport(); 

那么我需要做什么?

3 个答案:

答案 0 :(得分:4)

要在一个报告/ PDF中添加多个JRXML,您可以按照以下方式进行操作:

考虑以下方法生成包含2个JRXML的PDF报告,这些报告已添加到“jrxmlFileNames”列表中

public static void reportGenerator(String reportType, List<String> jrxmlFileNames, 
Datasource dataSource , String SwapFile)
{

    JRConcurrentSwapFile swapFile = new JRConcurrentSwapFile(SwapFile, 102400 , 10);
    JRAbstractLRUVirtualizer virtualizer = new JRSwapFileVirtualizer(1000, swapFile, true);
    Map<String, JRAbstractLRUVirtualizer> parameters = new HashMap<String, JRAbstractLRUVirtualizer>();
    parameters.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);
    try
    {
        if (reportType.equalsIgnoreCase("PDF"))
        {

            try
            {
                JasperReport jreport1 = JasperCompileManager.compileReport(ReportGenerator.class.getResourceAsStream(jrxmlFileNames.get(0)));
                JasperPrint jprint1 = JasperFillManager.fillReport(jreport1, parameters, new JRBeanCollectionDataSource(dataSource.getDataSourceFor1()));

                JasperReport jreport2 = JasperCompileManager.compileReport(ReportGenerator.class.getResourceAsStream(jrxmlFileNames.get(1)));
                JasperPrint jprint2 = JasperFillManager.fillReport(jreport2, parameters, new JRBeanCollectionDataSource(dataSource.getDataSourceFor2()));


                List<JasperPrint> jprintlist = new ArrayList<JasperPrint>();

                jprintlist.add(jprint1);
                jprintlist.add(jprint2);


                String fileName="TESTReport.pdf";
                JRExporter exporter = new JRPdfExporter();
                exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, jprintlist);

                exporter.setParameter(JRPdfExporterParameter.OUTPUT_FILE_NAME, fileName);

                exporter.exportReport();

                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
            }

            swapFile.dispose();

        }
    catch(Exception e)
    {
     e.printStackTrace();
    }

}

在上面的代码中,以下部分将帮助您添加多个JRXML

    List<JasperPrint> jprintlist = new ArrayList<JasperPrint>();    
    jprintlist.add(jprint1);
    jprintlist.add(jprint2);
    JRExporter exporter = new JRPdfExporter();   
exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, jprintlist);

希望它有所帮助!

答案 1 :(得分:2)

要在报告中获取两个页面,您可以使用报告组并删除所有其他频段,如详细信息,摘要。

添加报告组: -

1: - 打开报告并在报告检查器中右键单击并选择“添加报告组”。

2: - 提供任何名称并选择“按以下表达式分组”单选按钮并将表达式留空,然后单击“下一步”,再选择“报告”标题,然后完成。

3: - 现在,对于第二页,您可以以相同的方式添加一个报告组。

答案 2 :(得分:0)

这里有一个类似的问题:How do i add a second page on Jaspersoft iReport designer。还有一种更简单的方法:在Page Break上放置Detail Band组件,这意味着,拖放“Break”组件,然后在将显示的popUp上选择分页

相关问题