使用 Jsperreports 6.1.0 依赖项开发了一个简单的 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
注意:我在不同的论坛上发现许多链接都有相同的问题,但现在似乎已弃用提供的解决方案。
最佳答案
找到问题.....在这里发布解决方案....
实际上,我的 Controller 有请求映射为“/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>
并在 Controller 中将我的网址更新为......
WebHtmlResourceHandler webHtmlResourceHandler = new WebHtmlResourceHandler("../image?image={0}");
关于spring-mvc - Jasper 报告 Spring : Chart is not being displayed when report exported as HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30571512/