JasperReports HTML-отчет о нумерации страниц - PullRequest
1 голос
/ 25 ноября 2011

Я создаю отчет HTML для отображения табличных данных в веб-приложении, используя JasperReports и Spring MVC 3 .

Предоставляет ли JasperReports какой-тометод нумерации страниц?Или можно разбить данные на страницы в сгенерированном отчете с помощью некоторых утилит Spring MVC?

Ответы [ 2 ]

2 голосов
/ 25 ноября 2011

Да, JasperReports предоставляет несколько методов разбиения на страницы.

Вы можете установить параметры этого экспортера:

JRHtmlExporterParameter.BETWEEN_PAGES_HTML
JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS

Параметр экспортера BETWEEN_PAGES_HTML принимает java.lang.String для замены разделителя страниц по умолчанию при экспорте в HTML формат.

Если установлено значение Boolean.TRUE , экспортер IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS Параметр гарантирует, что все пустые строки в итоговой таблице HTML будут свернуты.

Если PROPERTY_ONE_PAGE_PER_SHEET не задано, все страницы документа будут распечатаны на одном листе. Разрывы страниц отображаются в виде дополнительных пустых строк между страницами.

Вы можете прочитать это руководство для получения дополнительной информации и изучить этот пример для Struts .

Вы можете использовать встроенный параметр отчета IS_IGNORE_PAGINATION или свойство шаблона отчета isIgnorePagination.

Вы можете установить эти параметры, чтобы не разбивать документы на несколько страниц.

Вы можете использовать API JasperReports - JasperDesign.setIgnorePagination (boolean ignorePagination) метод.


Дополнения

Соответствующий пост на SO: Является ли Jasper Reports подходящим решением для отображения отчетов в веб-приложении?

Пример отчета можно посмотреть в папке $JASPERREPORTS_DIR$\demo\samples\nopagebreak (распространяется с JasperReports pack).

1 голос
/ 28 ноября 2011

Я посмотрел на этот пример: http://helptodeveloper.blogspot.com/2010/02/jasper-reports-with-pagination.html и проверил демо webapp, включенное в пакет JasperReports (в частности, 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);
}

Затем я расширил стандарт JasperReportsHtmlView, предоставляемый Spring, переопределив метод 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);
}

ПРИМЕЧАНИЕ: Я фактически расширил класс html-view по другой причине ( Изображения, не показанные в html-отчете JasperReports ), но следуя тому же подходу, я решил и эту проблему.

NOTE pt.2: Я новичок в Spring Framework, поэтому, если мой ответ не совсем корректен ... Попытайтесь понять меня! :)

...