网上有很过关于打印和报表类的相关资料,但是查看了很多次,发现,其实是有很少讲打印和报表联系起来的,更多的是提供一些报表的课程,比如说jasperreports,或者就是写一些关于打印方面的相关的东西,比如说applet,flex等等,下面我要说的是将打印和报表的制作直接联系起来
首先介绍一些工具:报表的话是jasperreports,之所以用它的主要原因是有一下两点:
1:这个家伙真的很流行,当然完全属于个人意见
2:他的开发公司为他提供了一个很好的桌面开发工具,可以帮助我们在不知道一些相关内容是什么概念的情况下,也可以顺利的完成,而工具的名字是:iReport;也许别的报表工具也会提供相关的功能,但是因为小弟接触报表的时间比较短,所以……哈哈,后面想说什么大家都知道的
而在打印方面,如果要是采用applet的话,对于不知道java,jre是什么东东的人,其实要说服是很困难的,而且jre那个大约15M的文件,下载起来和安装起来也是时间上的消耗,所以我这里采用的是用flex写的,当然不是完全的自己所写,也是小部分修改而已。
jasperreports的相关学习就不在这里做一一介绍了
只是注意一些:field-- $f parameter $p $p是用java里面的map进行传输的,
visible $v
其实最重要的是在生成打印文件后,flex调用的问题。
而在jasperreports也提供一些方法,也提供一些生成相对文件的内容:比如pdf,xls,doc等等
用flex生成的swf文件,最大的缺点是不能打印图片只能预览
在这里调用一些通过jasperreports更改之后生成的代码:
//jasperreports通过生成jrxml文件,然后将jrxml文件转换为jasper文件来实现报表的相关,语句为:第一个参数为jrxml的路径和文件的组合名,第二个参数同理
JasperCompileManager.compileReportToFile(father.getPath(),"E:\\temp\\test.jasper");
//如果需要打印的话,是生成JasperPrint
JasperReport jasperReport = (JasperReport) JRLoader
.loadObject(jasper文件的路径);
//其中第一个参数://jasperreportFileName
//map中添加的对应jrxml文件中的$p -- parameter
jasperPrint = JasperFillManager.fillReport(jasperReport, map,JRDatasource类型的内容);
//将jasperPrint保存到session中,一边swf文件可以调用
request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
//生成的html文件的内容,也可以在java文件中通过out流进行输出:
PrintWriter out = response.getWriter();
out.println("<html>");out.println("<head>");out.println("<title>Print View</title>");out.println("</head>");out.println("<body bgcolor=\"white\">");out.println("<object width=\"100%\" height=\"400\">");out.println("<param name=\"movie\" value=\""+basePath+"Main1.swf\"/>");out.println("<embed src=\""+basePath+"Main1.swf\" FlashVars=\"jrpxml="+basePath+"servlets/xml?t="+t+"\" width=\"100%\" height=\"600\">");out.println("</embed>");out.println("</object>");out.println("</body>"); out.println("</html>");
//注意其中的servlet/xml,那个是需要在web。xml中进行配置的,配置文件如下:
<servlet>
<servlet-name>XmlServlet</servlet-name>
<servlet-class>net.sf.jasperreports.j2ee.servlets.XmlServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XmlServlet</servlet-name>
<url-pattern>/servlets/xml</url-pattern>
</servlet-mapping>