创建没有数据源的动态报表,并将数据放入详细信息区域以及页脚和页眉

时间:2013-05-21 12:32:37

标签: java jasper-reports dynamic-reports

我正在使用 JasperReportBuilder 并将报告导出到 PDF 。报告的全部内容由 MultiPageListBuilder Horizo​​ntalListBuilder VerticalListBuilder 生成,我不希望在数据来临时传递数据源来自各种数据来源。我想利用页面页脚和页眉来添加到每页的静态页眉和页脚以及页码。如果我尝试使用 addDetail(componentBuilder)方法添加 *详细信息中的 MultiPageListBuilder band(因为此 MultiPageListBuilder 包含多个页面数据),生成空白报告。如果我在标题摘要频段中添加 MultiPageListBuilder ,报告生成完美但页眉页脚乐队消失了。

示例代码段如下

JasperReportBuilder rpt = net.sf.dynamicreports.report.builder.DynamicReports.report();
MultiPageListBuilder multiPageList = cmp.multiPageList();
HorizontalListBuilder hrbld = cmp.horizontalList();

try {    
    rpt.addTitle(cmp.text("REPORT TITLE"));
    rpt.addTitle(cmp.text("--------------"));

    rpt.addPageHeader(cmp.pageXofY());

    for (int i = 0; i < 200; i++) {
        hrbld = cmp.horizontalList();
        hrbld.add(cmp.text("ABC " + i)).newRow();
        multiPageList.add(hrbld);
    }

    rpt.addDetail(multiPageList);

    rpt.summaryOnANewPage();
    rpt.addSummary(cmp.text("REPORT SUMMARY"));

    JasperPdfExporterBuilder pdfExporter = Exporters.pdfExporter("report.pdf");
    rpt.toPdf(pdfExporter);
    File file = new File("report.pdf");

    response.setContentType("application/pdf");

    return SUCCESS;
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return ERROR;
    }

但这不起作用。它会生成空白报告。如果我使用rpt.addTitle(multiPageList);代替rpt.addDetail(multiPageList);生成报告,但页面标题不会出现在每个页面上。

请帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:6)

我找到了一个解决方案,页眉和页脚只能用于细节带。要使用详细信息频段,您需要附加到报告的数据源。因此,设置一个空数据源进行报告,并获取可以放置数据的详细信息带,并使用页眉和页脚。空数据源可以设置为rpt.setDataSource(new JREmptyDataSource());然后报告将与rpt.addDetail(multiPageList);一起发送。谢谢大家。