简体   繁体   English

JasperReports HTML报告分页

[英]JasperReports HTML report pagination

I'm generating an HTML report for showing table data in a web application, using JasperReports and Spring MVC 3 . 我正在使用JasperReportsSpring MVC 3生成一个用于在Web应用程序中显示表数据的HTML报告。

Does JasperReports provide some kind of pagination method? JasperReports是否提供某种分页方法? Or, is it possible to paginate data in the generated report using some Spring MVC utilities? 或者,是否可以使用一些Spring MVC实用程序对生成的报告中的数据进行分页?

Yes, the JasperReports provides some pagination methods. 是的, JasperReports提供了一些分页方法。

You can set this exporters parameters: 您可以设置此导出器参数:

JRHtmlExporterParameter.BETWEEN_PAGES_HTML
JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS

The BETWEEN_PAGES_HTML exporter parameter accepts a java.lang.String to replace the default page separator when exporting to HTML format. BETWEEN_PAGES_HTML导出器参数接受java.lang.String以在导出为HTML格式时替换默认页面分隔符。

When set to Boolean.TRUE , the IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS exporter parameter ensures that all empty rows on the resulting HTML table are collapsed. 设置为Boolean.TRUE时IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS导出程序参数可确保折叠结果HTML表上的所有空行。

When PROPERTY_ONE_PAGE_PER_SHEET is not set, all document pages will be printed out into a single sheet. 未设置PROPERTY_ONE_PAGE_PER_SHEET ,所有文档页面将打印到一张纸上。 Page breaks appear as supplementary empty rows between pages. 分页符显示为页面之间的补充空白行。

You can read this guide for more information and explore this example for Struts . 您可以阅读本指南以获取更多信息,并探索Struts的 此示例

You can use the IS_IGNORE_PAGINATION built-in report parameter or isIgnorePagination report's template property. 您可以使用IS_IGNORE_PAGINATION内置报表参数或isIgnorePagination报表的模板属性。

You can set this parameters to avoid breaking documents into multiple pages. 您可以设置此参数以避免将文档分成多页。

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


Additions : 加法

The related post on SO: Is Jasper Reports the appropriate solution to display reports in a web application? 关于SO的相关帖子: Jasper报告了在Web应用程序中显示报告的适当解决方案吗?

You can look at the sample report in $JASPERREPORTS_DIR$\\demo\\samples\\nopagebreak folder (distributed with JasperReports pack). 您可以在$JASPERREPORTS_DIR$\\demo\\samples\\nopagebreak文件夹(随JasperReports包分发)中查看样本报告。

I've had a look at this example: http://helptodeveloper.blogspot.com/2010/02/jasper-reports-with-pagination.html and checked the webapp demo included in the JasperReports package (in particular the viewer.jsp ). 我已经看过这个例子: http//helptodeveloper.blogspot.com/2010/02/jasper-reports-with-pagination.html并检查了JasperReports包中包含的webapp演示(特别是viewer.jsp )。

I've tried to achieve something similar using Spring MVC. 我试图使用Spring MVC实现类似的功能。

In my controller class I've modified my request-handling method this way: 在我的控制器类中,我以这种方式修改了我的请求处理方法

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

Then I've extended the standard JasperReportsHtmlView provided by Spring, overriding the renderReport method: 然后我扩展了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);
}

NOTE: I actually extended the html-view class for another reason ( Images not shown in JasperReports' html report ), but following the same approach I solved also this problem. 注意:我实际上扩展了html-view类的另一个原因( 图像没有显示在JasperReports的html报告中 ),但是按照相同的方法我也解决了这个问题。

NOTE pt.2: I'm new to Spring Framework, so if my answer is not completely correct... Try to understand me! 注意pt.2:我是Spring Framework的新手,所以如果我的回答不完全正确,请尝试理解我! :) :)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM