使用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
注意:我在不同论坛上发现了许多相同问题的链接,但现在提供的解决方案似乎已被弃用。
答案 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}");