2011-07-26 48 views
3

我想了很久:圖像不能以ireport html格式顯示

我使用iReport設計器創建了報告。在它顯示所有格式的圖像(PDF,Excel,RTF),但是當我嘗試在JSP中以HTML格式顯示時,圖像不顯示。我想要解決這個問題。我正在嘗試這個很長一段時間。任何人都可以幫我嗎?

在此先感謝。

+0

你看過生成的HTML的源代碼嗎?圖像路徑可能被錯誤地設置 – CharlesB

+0

我已經看到了圖像路徑,它只顯示錯誤的路徑..但​​我不知道如何設置..如果我設置了正確的路徑也鏈接到相同的錯誤路徑..我怎麼解決dis ..?在此先感謝 – sowmi

回答

1

爲你的形象,嘗試表達類

'net.sf.jasperreports.engine.JRRenderable' 

和類似的意象表現如下:

net.sf.jasperreports.engine.JRImageRenderer.getInstance("image-dir/report-logo.gif") 

在碧玉報告文件(如myreport.jrxml)的表達該圖像將如下所示:

<image scaleImage="Clip" isUsingCache="false"> 
    <reportElement key="image-1" x="0" y="0" width="65" height="47"/> 
    <imageExpression class="net.sf.jasperreports.engine.JRRenderable"><![CDATA[net.sf.jasperreports.engine.JRImageRenderer.getInstance(image-dir"/report-logo.gif")]]></imageExpression> 
</image> 

對於Html報告,圖像servlet可能是有用,可在web.xml中配置:

<servlet> 
    <servlet-name>image</servlet-name> 
    <servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>image</servlet-name> 
    <url-pattern>/report/image</url-pattern> 
</servlet-mapping> 

執行報告的Java/Spring代碼,其中a.o.設置圖像的URI圖像的servlet:

public ModelAndView createReport(HttpSession session, String reportName, String format) { 

ApplicationContext context = this.getApplicationContext(); 
JasperReportsMultiFormatView report = new CollegeJasperReportsMultiFormatView(session); 
report.setUrl("/WEB-INF/reports/jasper/" + reportName + ".jasper"); 

Map<String, Object> model = getModel(); 
model.put("format", format); 

Map parameters = new HashMap(); 
report.setExporterParameters(parameters); 
parameters.put(JRExporterParameter.CHARACTER_ENCODING, "UTF8"); 
parameters.put(JRHtmlExporterParameter.IMAGES_URI, "../report/image?image="); 
parameters.put(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE); 

Properties contentDispositionMappings = new Properties();; 
contentDispositionMappings.put(format, "inline; filename=report." + format); 
report.setContentDispositionMappings(contentDispositionMappings); 

report.setApplicationContext(context);  // this will convert the export parameters, so has to be called after setExportParameters() 
return new ModelAndView(report, model); 
} 
+0

嗨markus,我試着用你的代碼..但它不適合我..你可以提供完整的代碼來顯示我的報告在HTML視圖中使用jsp代碼..?在此先感謝 – sowmi

+0

對於html報告,可能需要配置jasper報告的圖像servlet。見編輯的答案。 –

+0

嗨,我用默認的glassfish服務器運行我的jsp應用frm netbeans IDE,所以我的proj文件包含glassfish-web.xml文件。同時我將圖像servlet添加到dat xml文件中顯示錯誤。並再次嘗試創建一個單獨的文件作爲web.xml .. 但dat aso不成功..其顯示d以上錯誤..我可以做.. ..?你可以解釋我嗎?在此先感謝... – sowmi

2

有一點要注意的是,如果你有兩個重疊的控件在HTML中,其中一個控件將不顯示。確保您沒有其他控件與圖像控件重疊。

我以前有過這個問題的文本字段。

+0

這是我最後的問題。試了幾個小時,但這是答案......謝謝你提到。 – Benjamin

+1

使重疊元素更易於識別:選項> JasperReports屬性>選擇net.sf.jasperreports.allow.element.overlap>單擊「修改屬性」按鈕>設置爲false。 現在嘗試預覽,iReport會在生成報告之前通知您重疊的屬性。 – Weezle

+0

酷提示。很有幫助。 – Tom

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