Jasperreports Spring:报表导出为HTML时,不显示图表

时间:2015-06-01 10:47:05

标签: spring-mvc jasper-reports

使用Jsperreports 6.1.0依赖开发了一个Simple Spring Maven Web应用程序。创建了一个包含静态文本和图表的Jasper报告。以PDF格式导出报表时,报表使用静态文本和图表正确打印,但导出为HTML格式时,只显示静态文本而不是图表。

在互联网上搜索后发现需要ImageServlet和几个参数来导出HTML格式的报告。

在web.xml中添加了ImageServlet映射

通过WebHtmlResourceHandler设置图像URI。

仍然报告未显示图表。有什么问题?

以下是我的Spring Controller代码,用于以HTML格式导出报告。

List<BeanAuthorBooks> beanList = new ArrayList<BeanAuthorBooks>();
        beanList.add(new BeanAuthorBooks("APJ Kalam",10));
        beanList.add(new BeanAuthorBooks("Robin  Shamra",5));
        beanList.add(new BeanAuthorBooks("Rashmi Bansal",8));
        beanList.add(new BeanAuthorBooks("Dr. B.R.Ambedkar",60));
        beanList.add(new BeanAuthorBooks("Mahatma Gandhi",15));

        Map<String,Object> params = new HashMap();
        JasperReport jasperReport = JasperCompileManager.compileReport(this.getClass().getResourceAsStream("testreport.jrxml"));
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, new JRBeanCollectionDataSource(beanList,false));

        HtmlExporter exporter = new HtmlExporter();
        List<JasperPrint> jasperPrintsList = new ArrayList<JasperPrint>();
        jasperPrintsList.add(jasperPrint);
        exporter.setExporterInput(SimpleExporterInput.getInstance(jasperPrintsList));
        //set ImageHandler. Hack for images export to HTML
        SimpleHtmlExporterOutput output = new SimpleHtmlExporterOutput(response.getWriter());
        WebHtmlResourceHandler webHtmlResourceHandler =  new WebHtmlResourceHandler("image?image={0}");
        output.setImageHandler(webHtmlResourceHandler);           
        exporter.setExporterOutput(output);            
        SimpleHtmlReportConfiguration configuration = new SimpleHtmlReportConfiguration();
        exporter.setConfiguration(configuration);
        exporter.exportReport();

这是我的web.xml:

<servlet>
<servlet-name>ImageServlet</servlet-name>
<servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/image</url-pattern>
</servlet-mapping>

工作环境:Jasperreports 6.1.0,Spring 4.1.1,Eclipse Luna

注意:我在不同论坛上发现了许多相同问题的链接,但现在提供的解决方案似乎已被弃用。

1 个答案:

答案 0 :(得分:0)

发现问题.....这里的解决方案....

实际上我的控制器已将请求映射为“/ reports”,我导出报告的方法有请求映射“/ html”,

因此,图表中显示的图像的最终请求变得类似于“appname / reports / html / image?image = img_0_1”。

但ImageServlet使用URL“/ image”进行映射,因此我的代码更新如下:

在web.xml中

<servlet-mapping>
    <servlet-name>ImageServlet</servlet-name>
    <url-pattern>/reports/image</url-pattern>

并在控制器中将我的URL更新为......

WebHtmlResourceHandler webHtmlResourceHandler =  new WebHtmlResourceHandler("../image?image={0}");