最近遇到一个问题,用ireport做报表生成饼图,我是这么做的
      List satisfyReportCareerList = reportservice
.querySatisfyResultByCareer("2011062909021110967501");
int length2 = satisfyReportCareerList.size();
for (int m = 0; m < length2; m++) {
Map map2 = (Map) satisfyReportCareerList.get(m);
String careertype = map2.get("careertype").toString();
Double percentage = Double.valueOf(map2.get("percentage").toString());
params.put("careertype", careertype);
params.put("percentage", percentage);
}
JasperPrint jasperPrint2 = JasperFillManager.fillReport(appRealPath
+ "/webpage/report/tool/reportcareer.jasper", params,
new JRBeanCollectionDataSource(satisfyReportCareerList));
String reportFilePath2 = "report/tool/reportcareer.html";
String htmlReportFilePath2 = appRealPath + reportFilePath2;
JasperExportManager.exportReportToHtmlFile(jasperPrint2,
htmlReportFilePath2);
       return "/report/tool/satisfyAllDetaiReport";   在前台用iframe嵌套显示出生成的reportcareer.html这个页面,我在本地打开这个页面,会显示出我生成的饼图,是因为在同一个目录下有ireport生成的px样式,但是我在tomcat下打开这个页面,却看不到我生成的饼图,查看页面源码,看到的不是图片,而是ireport自已封装的一些px,<img alt="" src="reportposition.html_files/px" style="width: 20px; height: 1px;"/>,我感觉好像是没有样式所以导致这样的,我怎么才能在项目里把图片给显示出来啊,有做过这方面的大哥大姐吗,帮小弟一把,好几天了,谢谢了

解决方案 »

  1.   

    JRHtmlExporter exporter = new JRHtmlExporter();
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_STRING_BUFFER, sbuffer);
    exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "servlets/image?radom="+Math.random()+"&image=");
    exporter.setParameter(JRHtmlExporterParameter.HTML_HEADER, "");
    exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "");
    exporter.setParameter(JRHtmlExporterParameter.HTML_FOOTER, "");
    exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
    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>/servlets/image</url-pattern>
    </servlet-mapping>
      

  2.   

    谢谢楼上,但是不行啊,改后的代码是这样的
    JasperPrint jasperPrint = JasperFillManager.fillReport(appRealPath
    + "webpage/report/tool/reportposition.jasper", params,
    new JRBeanCollectionDataSource(satisfyReportList));
    String reportFilePath = "report/tool/reportposition.html";
    String htmlReportFilePath = appRealPath + reportFilePath;
    // JasperExportManager.exportReportToHtmlFile(jasperPrint,
    // htmlReportFilePath);
    JRHtmlExporter exporter = new JRHtmlExporter();
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_STRING_BUFFER, htmlReportFilePath);
    exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "servlets/image?radom="+Math.random()+"&image=");
    exporter.setParameter(JRHtmlExporterParameter.HTML_HEADER, "");
    exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "");
    exporter.setParameter(JRHtmlExporterParameter.HTML_FOOTER, "");
    exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
    exporter.exportReport();
    走最后一步的时候报错,错误如下:
    java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.StringBuffer
    at net.sf.jasperreports.engine.export.JRHtmlExporter.exportReport(JRHtmlExporter.java:447)
    at com.izhong.information.app.boss.tool.controller.satisfy.ToolSatisfyReportController.exportPosition(ToolSatisfyReportController.java:81)
    at com.izhong.information.app.boss.tool.controller.satisfy.ToolSatisfyReportController.satisfyReport(ToolSatisfyReportController.java:42)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at com.izhong.information.appbase.web.filters.CustomerAccountsVisitFilter.doFilter(CustomerAccountsVisitFilter.java:81)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    at java.lang.Thread.run(Thread.java:619)
      

  3.   

    JRExporterParameter.OUTPUT_STRING_BUFFER 需要一个StringBuffer 
    StringBuffer  sbuffer = new StringBuffer();
      

  4.   

    exporter.setParameter(JRExporterParameter.OUTPUT_STRING_BUFFER, htmlReportFilePath);htmlReportFilePath 是 String