fastreport在web中实现打印和编辑报表模板如何实现?
这个功能应该需要一个activex插件,fastreport中本来就有还是要自己做?
另外我如果用intraweb或用unigui调用如何能实现?这是delphi web开发中必须要解决的问题,希望大家关注,找出一个好的解决方法!

解决方案 »

  1.   

    fastreport在web中实现打印和编辑报表模板如何实现?
    这个功能应该需要一个activex插件,fastreport中本来就有还是要自己做?
    另外我如果用intraweb或用unigui调用如何能实现?这是delphi web开发中必须要解决的问题,希望大家关注,找出一个好的解决方法!
      

  2.   

    to: kaikai_kk在浏览器中实现打印跟预览需要activex,浏览器是不能直接支持的
      

  3.   

    Intraweb报表解决方案-FastReport报表插件
     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);
      

  4.   

    楼主说的第一种方法,在win7下的ie8会有些问题