2012-06-27 52 views
1

如何讓報表引擎調整band高度以適應內容佔用的真實空間?jasperreport高度帶內容依賴

在這個論壇中,如果您使用「pageHeader」部分,您可以找到答案。 http://jasperforge.org/plugins/espforum/view.php?group_id=102&forumid=103&topicid=83728

但在「columnFooter」或「pageFooter」中不起作用。

我想在第一頁的底部顯示信息,而不在以下頁面中保留空白空間。

有沒有解決方案?

+0

我知道的JasperReport文檔說:_Stretching高度元素可以被管理得非常好,由於部分分裂設施:除了極少數例外(即列和頁腳)_。我正在尋找其他解決方案 –

回答

0

作者:Ricardo Mariaca。此代碼是解決,感謝里卡多和動態報告

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; 
} 

}