• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Delphi 生成网页(html)报表

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在整理硬盘的时候,突然发现了这个小东西,回想起来是好多年前给 永恩集团 (达芙妮) 做连锁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;

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
直方图均衡化及matlab实现发布时间:2022-07-18
下一篇:
MATLAB中导入数据:importdata函数发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap