Reputation: 21
Firstly, sorry for my bad English. And my question: I try display report preview on html page. For it, set parameters:
request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outFilePath);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR, Boolean.TRUE);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "/preview/image?image=");
exporter.exportReport();
As can be seen, we export report into html file in the specified directory. In web, I added the following:
<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>/preview/image</url-pattern>
</servlet-mapping>
For displaying html, we have ftl controller:
@RequestMapping(value = "/events/preview", method = RequestMethod.POST)
public void reportPreviewEvents(String requestInJson,
@RequestParam("pageSize") Integer pageSize,
@RequestParam("pageNo") Integer pageNo,
HttpServletResponse response,
HttpServletRequest request,
Model model) {
try {
Map<String, Object> toModel = auditHandler.handleExportEvents(requestInJson, JasperExporter.Type.HTML, pageSize, pageNo, request);
model.addAllAttributes(toModel);
String filePath = (String) toModel.get("filePath");
reportContent = org.apache.commons.io.IOUtils.toString(new FileInputStream(filePath), Charset.forName("UTF-8"));
response.setCharacterEncoding("UTF-8");
response.getWriter().write(reportContent);
But when I open it (ip:port/context/report/events/preview/), I can't see images in html. Thanks in advance!
Upvotes: 0
Views: 2446
Reputation: 101
This is the way you can generate a HTML report and point to your image servlet for the newer JasperReports libraries (I am using 6.1.0), as a lot of the old functions are deprecated:
StringBuffer sbuffer = new StringBuffer();
HtmlExporter exporterHTML = new HtmlExporter();
SimpleExporterInput exporterInput = new SimpleExporterInput(jasperPrint);
exporterHTML.setExporterInput(exporterInput);
SimpleHtmlExporterOutput exporterOutput = new SimpleHtmlExporterOutput(sbuffer);
//pointing to the image servlet
HtmlResourceHandler imageHandler = new WebHtmlResourceHandler( request.getContextPath() + "/servlets/image?" + ImageServlet.IMAGE_NAME_REQUEST_PARAMETER
+ "={0}" + "&uuid=" + UUID.randomUUID().toString());
exporterOutput.setImageHandler(imageHandler);
//setting some sonfigs for the report
SimpleHtmlExporterConfiguration htmlConfig = new SimpleHtmlExporterConfiguration();
SimpleHtmlReportConfiguration htmlReportConfiguration = new SimpleHtmlReportConfiguration();
htmlConfig.setHtmlFooter("");
htmlConfig.setHtmlHeader("");
htmlConfig.setBetweenPagesHtml("");
htmlReportConfiguration.setPageIndex(pageIndex);
exporterHTML.setConfiguration(htmlConfig);
exporterHTML.setExporterOutput(exporterOutput);
exporterHTML.setConfiguration(htmlReportConfiguration);
exporterHTML.exportReport();
Hope someone finds it helpful.
Upvotes: 1