Spring MVC 3.0 Jasper-Reports 4 Направление HTML-отчетов в браузере - PullRequest
3 голосов
/ 16 июня 2011

Я работаю с Spring MVC 3 и JasperReports. Я создал несколько отличных отчетов в формате PDF и Xls без проблем. Что я хотел бы сделать, это отобразить созданный отчет HTML на экране для пользователя в качестве предварительного просмотра отчета, который он получает, завернутый в шаблон веб-сайта. Есть ли способ сделать это?

Я не нашел никаких учебных пособий / статей на эту тему, я нашел книгу по JasperReports 3.5 для разработчиков Java, которая вроде бы решала эту проблему. (Я новичок в этом, так что терпите меня.) Насколько я понимаю, я должен перенаправить поток ввода в браузер. Я считаю, что должен быть более легкий путь! И способ убрать из него верхний и нижний колонтитулы отчета HTML.

Любая помощь будет оценена!

1 Ответ

4 голосов
/ 17 июня 2011

Вместо использования другого фреймворка для решения моей проблемы.Я решил это так:

@RequestMapping(value = "/report", method = RequestMethod.POST)
public String htmlReport(@RequestParam(value = "beginDate") Date begin,
        @RequestParam(value = "endDate", required = false) Date end,
        ModelMap map) {

    try {

        // Setup my data connection
        OracleDataSource ds = new OracleDataSource();
        ds.setURL("jdbc:oracle:thin:user/password@10.10.10.10:1521:tst3");

        Connection conn = ds.getConnection();

        // Get the jasper report object located in package org.dphhs.tarts.reports
        // Load it 
        InputStream reportStream = this.getClass().getResourceAsStream("reports/tartsCostAllocation.jasper");
        JasperReport jasperReport = (JasperReport) JRLoader.loadObject(reportStream);

        // Populate report with data
        JasperPrint jasperPrint =
            JasperFillManager.fillReport(jasperReport, new HashMap(), conn);

        // Create report exporter to be in Html
        JRExporter exporter = new JRHtmlExporter();

        // Create string buffer to store completed report
        StringBuffer sb = new StringBuffer();

        // Setup report, no header, no footer, no images for layout
        exporter.setParameter(JRHtmlExporterParameter.HTML_HEADER, "");
        exporter.setParameter(JRHtmlExporterParameter.HTML_FOOTER, "");
        exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);

        // When report is exported send to string buffer
        exporter.setParameter(JRExporterParameter.OUTPUT_STRING_BUFFER, sb);
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

        // Export the report, store to sb
        exporter.exportReport();

        // Use Jsoup to clean the report table html to output to browser
        Whitelist allowedHtml = new Whitelist();
        allowedHtml.addTags("table", "tr", "td", "span");
        allowedHtml.addTags("table", "style", "cellpadding", "cellspacing", "border", "bgcolor");
        allowedHtml.addAttributes("tr", "valign");
        allowedHtml.addAttributes("td", "colspan", "style");
        allowedHtml.addAttributes("span", "style");
        String html = Jsoup.clean(sb.toString(), allowedHtml);

        // Add report to map
        map.addAttribute("report", html);

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return "costallocation/report";
}
...