1

如何让报表引擎调整带高以适应内容所占用的真实空间?

如果您使用“pageHeader”部分,您可以在此论坛中找到回复。 http://jasperforge.org/plugins/espforum/view.php?group_id=102&forumid=103&topicid=83728

但在“columnFooter”或“pageFooter”中不起作用。

我想在第一页的底部显示信息,而不是在后续页面中保留空白。

有什么解决办法吗?

4

1 回答 1

0

里卡多·马里亚卡。此代码是解决方案,感谢 Ricardo 和 Dynamic Report

    private void build() {
    try {
        JasperPdfExporterBuilder pdfExporterBuilder = export
                .pdfExporter(PDF_FILE);
        JasperReportBuilder jasperReportBuilderMain = report()
                .columns(
                        col.column("Item", "item", type.stringType()),
                        col.column("Quantity", "quantity",
                                type.integerType()),
                        col.column("Unit price", "unitprice",
                                type.bigDecimalType()))
                .setDataSource(createSubreportDataSource())
                // .detail(cmp.subreport(createSubreport()))
                .setWhenNoDataType(WhenNoDataType.ALL_SECTIONS_NO_DETAIL);

        JasperReportBuilder jasperReportBuilderDisclaimer = report()
                .setPageFormat(PageType.A4, PageOrientation.LANDSCAPE)
                .summary(cmp.subreport(jasperReportBuilderMain))
                .summaryWithPageHeaderAndFooter()
                .setWhenNoDataType(WhenNoDataType.ALL_SECTIONS_NO_DETAIL)
                .columnHeader(
                        cmp.text("first page header").setFixedHeight(50))
                .columnFooter(
                        cmp.text(DISCLAIMER).setStretchWithOverflow(true)
                                .setFixedHeight(250))
                .pageHeader(
                        Templates
                                .createTitleComponent("Ricardo Mariaca Approach"))
                .pageFooter(Templates.footerComponent).show()
                .toPdf(pdfExporterBuilder);

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

private JRDataSource createSubreportDataSource() {
    DRDataSource dataSource = new DRDataSource("item", "quantity",
            "unitprice");
    for (int i = 0; i < 180; i++) {
        dataSource.add("Book", (int) (Math.random() * 10) + 1,
                new BigDecimal(Math.random() * 100 + 1));
    }
    return dataSource;
}

}

于 2012-06-28T22:07:47.967 回答