• Delphi 生成网页(html)报表


    在整理硬盘的时候,突然发现了这个小东西,回想起来是好多年前给 永恩集团 (达芙妮) 做连锁POS系统的时候做的一个用DELPHI 生成HTML报表的测试(我已经5年没用DELPHI 了)。为什么要求这么变态?
    我当初给达芙妮用  fastreport 做了一个报表,格式和数据展示完全满足要求,但最终被拒绝了,其原因是,他们原来有一套oracle erp 的打印就是用HTML 网页形式打印的。我很崩溃,我记得oracle 里面的 report builder 也很强的,为什么不用?其实到现在我仍然坚持用fastreport 做是对的,但当时,人家是客户,非得用html 的,你也没办法,人家就喜欢在浏览器里点右键打印,哎,这年头,什么样的需求都有。

    当时这个团队没有去坐调研,我只好抽晚上空余时间,看了下资料,解决了这个问题,其实很简单,纯体力活。
    delphi 里面有 webbrowser 控件,在这个上面直接输出html 代码就可以了。你可以先用html做好一个模板,然后往里面填写数据即可。

    这个报表很复杂的,涉及到分组,汇总聚合。分类汇总,明细等在一个报表上。 也就是一个结构复杂的html 页面。 结构的复杂,说白了是体力活,其关键点:

    生成html模板
    举个很简单的例子,头部:

    {报表头部分一,6个参数}
      HTML_LZS_HEAD_ONE=
      '<TABLE cellSpacing=0 border=0> '
      +'<TBODY>   '
      +'<TR> '
      +'<TD align=right>分公司:</TD>  '
      +'<TD align=left>%s</TD></TR> '
      +'<TR>  '
      +'<TD align=right>经营小组:</TD>  '
      +'<TD align=left>%s</TD></TR> '
      +'<TR> '
      +'<TD align=right>门店:</TD>  '
      +'<TD align=left>%s</TD></TR>'
      +'<TR>'
      +'<TD align=right>年:</TD> '
      +'<TD align=left>%s</TD></TR> '
      +'<TR> '
      +'<TD align=right>月:</TD> '
      +'<TD align=left>%s</TD></TR>  '
      +'<TR> '
      +'<TD align=right>单据状态:</TD> '
      +'<TD align=left>%s</TD></TR> '
      +'</TBODY>  '
      +'</TABLE>  ';




    从数据库中查询数据,得到结果,并填充

    F_HEAD_ONE:=Format(HTML_LZS_HEAD_ONE,
          [aqryPublic.FieldByName('SUBCOMPANY_ID').AsString,
           aqryPublic.FieldByName('WORKING_GROUP').AsString,
           aqryPublic.FieldByName('SHOP_ID').AsString,
           aqryPublic.FieldByName('REFERENCE_YEAR').AsString,
           aqryPublic.FieldByName('REFERENCE_MONTH').AsString,Fstate]);

    这样我们就生成了一小段 html  代码,如何显示在webbrowser上呢?

    procedure TFrmReport.ShowHtml(content: widestring);
    var
      v: Variant;
      HTMLDocument: IHTMLDocument2;
    begin  
      v := VarArrayCreate([0, 0], varVariant);
      v[0] := content;
      HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
      HTMLDocument.write(PSafeArray(TVarData(v).VArray));
      HTMLDocument.close;
      HTMLDocument := nil;
    end;
    
    




    另外要注意
    initialization
      OleInitialize(nil);
    finalization
      OleUninitialize;


    谢祥选【小宇飞刀(xieyunc)】
  • 相关阅读:
    2018年产品设计协作领域最强黑马居然是它?
    中小企业网页设计,轻松拓展网络市场
    那些年,UI设计师还在手工标注和切图时走的弯路
    据说,攻城狮也可以像设计狮一样切图了?
    拼图类APP原型模板分享——简拼
    UI设计初学者必看,这款设计神器教你快速入门
    设计交付指南:设计师与开发如何才能好好协作?
    用户体验设计师面试中可能会问及的10个高频问题
    产品,设计和开发,高效协同只差一份文档
    素数
  • 原文地址:https://www.cnblogs.com/xieyunc/p/4438284.html
Copyright © 2020-2023  润新知