【问题标题】:Jasperreports Spring : Chart is not being displayed when report exported as HTMLJasperreports Spring:报告导出为 HTML 时未显示图表
【发布时间】:2015-08-14 19:05:19
【问题描述】:

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

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

在 web.xml 中添加 ImageServlet 映射

通过 WebHtmlResourceHandler 设置 Image 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

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

【问题讨论】:

    标签: spring-mvc jasper-reports


    【解决方案1】:

    发现问题.....在这里发布解决方案....

    实际上,我的控制器的请求映射为“/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>
    

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

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

    【讨论】:

      猜你喜欢
      • 2012-01-04
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多