JasperReports HTML报告分页

时间:2011-11-25 11:04:44

标签: java spring spring-mvc pagination jasper-reports

我正在使用 JasperReports Spring MVC 3 生成用于在Web应用程序中显示表数据的HTML报告。

JasperReports是否提供某种分页方法?或者,是否可以使用一些Spring MVC实用程序对生成的报告中的数据进行分页?

2 个答案:

答案 0 :(得分:2)

是的, JasperReports 提供了一些分页方法。

您可以设置此导出程序参数:

JRHtmlExporterParameter.BETWEEN_PAGES_HTML
JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS

BETWEEN_PAGES_HTML exporter参数接受 java.lang.String 以在导出到 HTML 格式。

设置为 Boolean.TRUE 时, IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS 导出程序 参数确保生成的HTML表上的所有空行都已折叠。

如果未设置 PROPERTY_ONE_PAGE_PER_SHEET ,则所有文档页面将打印在一张纸上。分页符在页面之间显示为补充空行。

您可以阅读this guide了解详情,并浏览this example Struts

您可以使用IS_IGNORE_PAGINATION内置报告参数或isIgnorePagination报告的模板属性。

您可以设置此参数以避免将文档分成多个页面。

您可以使用JasperReports API - JasperDesign.setIgnorePagination(boolean ignorePagination)方法。


附加

关于SO的相关帖子:Is Jasper Reports the appropriate solution to display reports in a web application?

您可以查看 $JASPERREPORTS_DIR$\demo\samples\nopagebreak 文件夹中的示例报告(与 JasperReports 包一起分发)。

答案 1 :(得分:1)

我看过这个示例:http://helptodeveloper.blogspot.com/2010/02/jasper-reports-with-pagination.html并检查了JasperReports包中包含的webapp演示(特别是viewer.jsp)。

我尝试使用Spring MVC实现类似的功能。

在我的控制器类中,我以这种方式修改了请求处理方法

@RequestMapping("/report")
public ModelAndView showHtmlReport(HttpServletRequest request,
        HttpServletResponse response,
        @RequestParam(value = "page", required = false) String pageIndex,
        ModelMap model) {

    // do something...

    if (StringUtils.isNotBlank(pageIndex)
            && StringUtils.isNumeric(pageIndex)) {
        model.put("page_index", new Integer(pageIndex));
    }

    // do something else...

    return new ModelAndView("htmlReport", model);
}

然后我扩展了Spring提供的标准JasperReportsHtmlView,覆盖了renderReport方法:

@Override
protected void renderReport(JasperPrint populatedReport,
        Map<String, Object> model, HttpServletResponse response)
        throws Exception {

    // check something...

    if (model.containsKey("page_index")) {
        Map<net.sf.jasperreports.engine.JRExporterParameter, Object> expParams = 
                this.getConvertedExporterParameters();
        expParams.put(
                net.sf.jasperreports.engine.JRExporterParameter.PAGE_INDEX,
                model.get("page_index"));
    }

    // check something else...

    super.renderReport(populatedReport, model, response);
}

注意:我实际上是出于另一个原因(Images not shown in JasperReports' html report)扩展了html-view类,但是按照相同的方法我也解决了这个问题。

注意第2页:我是Spring Framework的新手,所以如果我的答案不完全正确......试着去了解我! :)