2013-07-17 103 views
0

首先,對我的英語不好,感到抱歉。而我的問題: 我嘗試在html頁面上顯示報告預覽。爲此,設置參數:Jasper報告不顯示圖像

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(); 

可以看出,我們將報告導出到指定目錄下的html文件中。在網上,我增加了以下內容:

<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> 

對於顯示HTML,我們有FTL控制器:

@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); 

但是當我打開它(IP:端口/上下文/報告/事件/預覽/) ,我無法在html中看到圖像。 在此先感謝!

+0

此外:我發現http://community.jaspersoft.com/questions/531045/image-not-displayed-html-view。最後的評論。我用5.0.4版本 – MacTire

+0

發現錯誤。它需要上下文的圖像uri,如:exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,ContextLoader.getCurrentWebApplicationContext()。getServletContext()。getContextPath()+「/ preview/image?image =」); – MacTire

+0

只需從request.getSession()。getServletContext()。getRealPath(「/」)獲取相關路徑 – Harsha

回答

0

這是可以生成一個HTML報告,並點爲新的JasperReports庫(我用6.1.0)圖像的servlet的方式,因爲很多老的功能已被棄用:

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(); 

希望有人認爲它有幫助。