fastreport在web中实现打印和编辑报表模板如何实现?
这个功能应该需要一个activex插件,fastreport中本来就有还是要自己做?
另外我如果用intraweb或用unigui调用如何能实现?这是delphi web开发中必须要解决的问题,希望大家关注,找出一个好的解决方法!
这个功能应该需要一个activex插件,fastreport中本来就有还是要自己做?
另外我如果用intraweb或用unigui调用如何能实现?这是delphi web开发中必须要解决的问题,希望大家关注,找出一个好的解决方法!
这个功能应该需要一个activex插件,fastreport中本来就有还是要自己做?
另外我如果用intraweb或用unigui调用如何能实现?这是delphi web开发中必须要解决的问题,希望大家关注,找出一个好的解决方法!
RadXE 2012-01-11 13:38 Delphi, 程序设计 抢沙发 1阅读次数:1,576
IntraWeb数据库报表是IntraWeb的核心,但是目前没有现成的打印控件,以下是笔者通过实战得出的一些想法,供大家参考。
主要思路有两条。
一,在服务器端由fastreport生成报表,并转换输出成html,pdf等文件。然后组装 成URL地址,传递给客户端,让客户端访问这个URL,也就是报表的输出文件。
二,先在服务器端创建OCX组件,然后在服务器端把报表内容保存并压缩编码,最后调用OCX的方法,读取经过压缩的报表内容。先来谈谈第一种方法的实现。
在服务器端保存为html格式的文件供客户端浏览。核心代码如下,
LFile:=’temp’+formatdatetime(‘yymmddhhmmss’,now)+’.html’;
tempfile :=webapplication.ApplicationPath+’files\’+webapplication.AppID+’\'+Lfile;
ForceDirectories(ExtractFileDir(tempfile));
frxReport1.LoadFromFile(WebApplication.ApplicationPath+’report\A4.fr3′);
frxHTMLExport1.FileName:=tempfile;
frxReport1.PrepareReport;
frxReport1.Export(frxHTMLExport1); //如果要浏览pdf,在这里更改。
LURL:=webapplication.AppURLBase+’/files/’+WebApplication。ApplicationPath+’/'+LFile;
WebApplication.NewWindow(LURL);以上是让客户端浏览文件的效果。
第一种方法比较简单,这里不多说了,有点delphi基础的都会。重点来谈一下第二种方法(OCX插件)。
插件方式的优点是显而易见的,给客户更直观的感觉,如同C/S程序一样,直接看到报表界面,并且可以直接打印。先看下效果图实现以上的效果需要做两个工作。
第一,在delphi环境下建立ActiveX Form,并加入读取报表数据的方法pone。在ActiveX Form的实现部分,加入报表控件,frxReport1: TfrxReport; frxPreview1: TfrxPreview; frxDBDataset1: TfrxDBDataset; 编译并注册成OCX.。
第二,在IW程序的打印事件中,加载报表,并保存成报表文件。经过编码后得到报表的编码文件。
组后组装成html格式,核心代码如下://用来暂时保存报表数据
sfile :=webapplication.ApplicationPath+formatdatetime(‘hhmmss’,now)+’.frp’;
ss:=”;
frxReport1.Clear;
//导入报表
fastreport1.LoadFromFile(WebApplication.ApplicationPath+’report\testsql.fr3′);
fastreport1.ShowProgress:=false;
fastreport1.PrepareReport;
fastReport1.SavePreparedReport(sfile);
if fileexists(sfile) then
begin
ss:=BianMa(sfile); //报表数据保存到SS 后,删除报表数据
deletefile(sfile);
end
else
ss:=’No Data’;//组装网页文件
tt:=’<html><head><title>托运单打印</title>’+
‘<META NAME=”Author” Con_TENT=”">’+
‘<META NAME=”Keywords” Con_TENT=”">’+
‘<META NAME=”Description” Con_TENT=”">’+
‘<style type=”TEXT/CSS”>body { font-family: 宋体, Arial; font-size: 10.2pt; background-color: #FFFFFF; ’+
‘margin-left: 0; margin-top: 0 } </style> </head> ’+
‘<body style=”margin:0 ”><textarea id=”RMVIEWER_DATA” style=”display:none”> ’ ;tt:=tt+ss;
tt:=tt+’</textarea><table border=”0″ width=”100%” height=”100%”> <tr> <td width=”100%”>’+
‘<OBJECT id=ufo name=ufo ’+
‘ classid=”clsid:AE0C8E65-C847-11D6-BE31-00E04CEF42D5” ’+
‘ codebase=”http://127.0.0.1:1234/report/OCXFR3P.ocx.ocx#version=1,0,2,1′ ” width=100% height=100% > ’+
‘</OBJECT> ’+
‘<SCRIPT language=VBScript> ’+
‘ document.all(“ufo”).pon_e=document.all(“RMVIEWER_DATA”).value ’+
‘</Script> ’+
‘ </td> </tr> </table></body></html>’ ;
//保存网页
LFile:=’temp’+formatdatetime(‘yymmddhhmmss’,now)+’.htm’;
tempfile :=webapplication.ApplicationPath+’files\’+webapplication.Apppath+’\'+Lfile;
//生成files目下唯一文件夹
ForceDirectories(ExtractFileDir(tempfile));
LURL:=webapplication.AppURLBase+’/files/’+webapplication. Apppath +’/'+LFile;
webapplication.NewWindow(LURL);