【程序编程相关:在Delphi中使用CreateOleO】
【推荐阅读:BORLAND第三方组件安装方法 】在b/s结构应用中,crystal report是一种大型报表系统常用与推荐的解决方案.但crystal report目前价格昂贵,而且该系统相当庞大.它的可定制性及精确控制打印效果方面尚不够完善.当然,在目前市场上,它仍是一种首选的web应用的报表解决方案.【扩展信息:扫雷外挂的设计与实现(一) 】
如果能将c/s应用中成熟的报表解决方案搬到b/s应用中,相信对于大部分开发人员来说,都是非常欢迎的.本文将讲述一个在java环境中利用fastreport实现b/s应用中用户可自定义的报表解决方案.因为笔者近段时间正用delphi.java做一些项目,所以样例代码就以delphi.java编写.本解决方案样例的基本环境是:windows 2000 server+sql server 2000+tomcat 4.0.开发工具:intellij idea 3.0,delphi 5.0.客户端为ie 5.0浏览器.方案共要求用delphi编写两个程序,一个是将被包含在网页中并在浏览器中运行的activex(.ocx),一个是运行在服务器端的报表处理程序,中间通过java程序连接——或任何其他web语言都可以,如asp.php等.方案的基本原理图如下:报表设计过程
报表打印过程
report server:可以做成一个普通的windows程序,也可以做成一个com程序(automation object).在报表设计过程中,用户端(activex)向web server发送报表设计请求,请求中包含要设计报表的名称;web server 收到该请求后,调用report server请求设计的报表文件;report server收到请求后,先装载报表的数据环境,然后将报表设计文件(.frf)与该报表的数据环境文件压缩成一个包文件(.zip),将该包文件的完整路径名返回给web server调用程序;web server将包文件回送给用户端(activex),用户端将接收到的包文件保存到本地硬盘上,并解压缩,从数据环境文件中恢复数据环境,通过fastreport的相应控件打开报表文件给用户提供可视化设计.用户在activex中设计报表时,虽然不能与数据库连接,但因数据环境已存在,所以用户仿如在通常的c/s应用结构下设计报表,能正常地看到报表的数据字典信息.在报表打印过程中,用户端(activex)向web server发送报表打印/预览请求,请求中包含要打印/预览的报表名称;web server 收到该请求后,调用report server请求打印或预览的报表文件;report server收到请求后,先装载报表的数据环境,然后装载报表文件(.frf),接着在无界面状态下运行报表,最后将生成的已准备的报表文件(.frp)压缩成一个包文件(.zip),将该包文件的完整路径名返回给web server调用程序;web server将包文件回送给用户端(activex),用户端将接收到的包文件保存到本地硬盘上,并解压缩,通过fastreport的相应控件打开报表文件(.frp)给用户预览或打印或重新调整格式或输出为其他格式文件.用户在activex中预览报表,仿如在通常的c/s应用结构下预览报表.web server:提供通常的web服务功能.activex:activex是microsoft提出的一组使用com(component object model,部件对象模型)使得软件部件可在网络环境中进行交互的技术集.它与具体的编程语言无关.作为针对internet应用开发的技术,activex被广泛应用于web服务器以及客户端的各个方面.本方案中的activex控件主要做两方面的事情,一是利用fastreport控件进行报表处理,包括报表设计(.frf文件)与报表打印(.frp文件).一是与web server进行通信,请求与接收包文件.本文样例的activex采用delphi 5.0编写.下面分述各部分的一例具体实现(因为仅为说明方案的实现,所以很多代码细节都进行了简省).一. report serverreport server既可以做成一个普通的windows程序,也可以做成一个com程序(automation object).本例中为简化见,采用普通的windows程序实现.在delphi中new一个应用程序.在form中加入tfrreport.tfrdbdataset.adoconnection.tadoquery等控件——为了使用fastreport的控件,需要安装该控件包,可从站点http://www.fast-report.com 下载,国内很多软件站点都提供该控件包的下载.其中tfrdbdataset.tadoquery控件视应用需要可加入多个,另外为了压缩文件,还要加入一个压缩控件,本例使用vclzip.... 下一页