posts - 84, comments - 54, trackbacks - 0, articles - 0
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Web application 中使用Crystal Report(二)

Posted on 2007-04-13 22:31 马达+斯加 阅读(606) 评论(0)  编辑  收藏 所属分类: Java Report
 

无论Crystal report,还是Jasper Report,一到了Websphere Portal中总是要折腾一番才能出来的。

首先,CR的标签到了portlet中就出错了,“This method can be called after HTTP body”,好像是这个信息。

其次,如果使用 viewer.processHttpRequest() 也会出错。

再有,不能在Jsp中使用<portlet:defineObjects />,否则也会报错。

诸多问题,也没有深入去研究,最简单的解决办法就是使用普通的jsp文件来生成报表,然后用iframe将这个jsp包含在portlet中

顺便也谈谈Jasper Report吧,虽然也很容易使用,但是到了Portal里面也不同了。

以导出PDF文件为例子,一般的代码块如下:

HttpServletResponse httpServletResponse = (HttpServletResponse) portletResponse;
httpServletResponse.setContentType(
"application/pdf");
S ervletOutputStream outputStream 
= httpServletResponse.getOutputStream();

InputStream inputStream 
= this.getServlet().getServletConfig().getServletContext().getResourceAsStream("/ rpt/Flights.jasper");

JRBeanCollectionDataSource beanDataSource 
= new JRBeanCollectionDataSource(filghts); //'flights' is a pre-defined arraylist contains all records to be printed

//Export PDF file
JasperRunManager.runReportToPdfStream(inputStream, outputStream, new HashMap(), beanDataSource);
outputStream.flush();
outputStream.close();


这在普通web应用中没有任何问题,但是,到了portal里面,导出的PDF文件就打不开了,会出现“file is damaged”的提示信息。

如果把第3行换成:

FileOutputStream outputStream = new FileOutputStream(new File("C:\\report.pdf"));


导出的PDF就不会有问题。使用ultraedit比较了两个导出的PDF后发现,使用servletOutputStream的那个,在EOF后多出了一长串portal页面的HTML代码出来,难怪打不开了。

解决办法就是使用普通的servlet而不用portlet servlet。


只有注册用户登录后才能发表评论。


网站导航: