日期:2014-05-20  浏览次数:20894 次

struts2,ireport导出PDF,JasperFillManager.fillReport不通过
在网上下的struts2 和 ireport 的demo 可以跑起来。demo上面的例子一般是ireport 4.*  或者 3.*。
我现在要用的版本是5.0.1。 用这个版本主要是因为可以用ireport 里面的html 组件。
首先是用其中的一种方式,code如下:
                           public void export2word() {
/* 1 */ String sourceFileName=ResponseUtil.getRequest( ).getSession().getServletContext().getRealPath("/jaspers/ListIReport.jasper");
/* 2 */ JasperPrint jasperPrint=JasperFillManager.fillReport(sourceFileName,    new HashMap(), getDs());                                  System.out.println("22222222222222")
/* 3 */ JRPdfExporter pdfExporter=new JRPdfExporter();
/* 4 */ ResponseUtil.getResponse( ).addHeader("Content-Disposition", "attachment;Filename="+  java.net.URLEncoder.encode(outfileName, "UTF-8")+".pdf");
/* 5 */ pdfExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ResponseUtil.getResponse( ).getOutputStream());
/* 6 */ pdfExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
/* 7 */ JasperExportManager.exportReportToPdf(jasperPrint);
/* 8 */ pdfExporter.exportReport();
/* 9 */ ResponseUtil.getResponse( ).setContentType("application/pdf");
} catch (JRException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
}
getDs方法:
private JRBeanCollectionDataSource getDs(){
List list=new ArrayList();
for(int i=0;i<10;i++){
list.add(new MyJavaBean(i+1, "<div>dddddd<br/><br/><br/><table><tr><td>求大神指点</td></tr></table></div>"));
}
JRBeanCollectionDataSource ds=new JRBeanCollectionDataSource(list);
return ds;
}

在原来的demo上面是可以跑通的。在demo上然后把jasperreport对应的包换成了jasperreports-5.0.1.jar,添加了一个jasperreports-htmlcomponent-5.0.1.jar(用于支持html组件,可以解析html标签)。之后还是可以跑通,html标签可以正常解析。
把对应的代码原封不动的拿到自己项目之后,在/* 2 */ JasperFillManager.fillReport方法 就运行不下去了。    我们项目用的是struts2-2.3.1.2里面的jar包,主要有xwork-core-2.3.1.2.jar    struts2-jasperreports-plugin-2.3.1.2.jar    struts2-core-2.3.1.2.jar三个jar包。执行到/* 2 */ JasperFillManager.fillReport方法 不报错,但是后面的22222222不打印出来。


上面的那个走不通之后,用另外的一个demo。对应的struts.xml配置是  <package name="ireport" extends="struts-default,jasperreports-default">,没有任何提示,正常。
我们现在项目是用的struts 2.3.1.2 的版本。用现在项目的xwork-core-2.3.1.2.jar    struts2-jasperreports-plugin-2.3.1.2.jar    struts2-core-2.3.1.2.jar这三个jar包把demo 中的jar包替换之后就,<package name="ireport" extends="struts-default,jasperreports-default">, 就报出警告,说引用了一个未定义的jasperreports。然后启动报错。

哪位大神有办法或者思路的话麻烦指点哈。如果有对应的代码的例子,方便的话麻烦发给我邮箱 529864480@qq.com。  哪位兄弟要这样的例子,也可以联系我的。
搞死了,求大神帮忙啦。如果有代码那就谢天谢地谢谢你了。




------解决方案--------------------
不要死扣代码了,你要看你strut2.0的jar是否支持jasperreports-5.0.1.jar,代码一般不会有问题的,包冲突的概率很大
------解决方案--------------------
高版本jar包分的很清晰,不像低版本,相关的都放到一个jar内。还是要多看jar说明。