在PHP开发中使用ReportAll报表控件

来源:互联网 发布:网络女主播福利视频 编辑:程序博客网 时间:2024/06/07 15:18

    前段时间做一个web项目,需要打印证照功能,一开始是采用生成pdf文件再发到本地打印的方法,在客户实际使用中发现不太灵活,主要是在不同打印机环境下,偏移量不太好设定,另外客户想自行调整打印内容,比如字体大小,这个用pdf就比较麻烦了,于是在网上找了一下,看有没有好的web打印方案,发现了reportall这个软件,试用了一下,感觉还不错,而且普通版是免费使用的.现在就和大家分享一下使用心得

.reportall简介

详细介绍请到其官网查看(网址:http://www.reportall.com.cn),这里只简单说一下.

ra采用的是activeX技术,可以兼容大多数浏览器,在第一次使用的时候,浏览器会把reportall.ocx这个activeX控件下载到本地,这个控件负责解析报表的模板格式(报表文档)以及要打印的动态数据(报表数据),所以服务器端的任务就是负责提供这两类数据.

报表文档:记录报表页面的样式及格式信息.reportall提供了专门的报表设计器来编辑报表文档

动态数据:xml格式定义的要填写到报表中的内容


.使用步骤

<1>reportall报表设计器设计好报表文档,如果你接触过fastreport之类的报表软件,对这种设计方式应该不陌生.具体方法请查看ra的说明文件.最终得到一个后缀名为rad的报表文档.

<2>把报表文档发到服务器的适当地方,比如/public/rad路径下

<3>把下面代码嵌入到需要输出报表的页面里,这段代码定义了报表文档的地址和提供动态数据的服务器地址

<Object clsid="{568DC60B-F884-4147-8610-8C348AAFA2F8}"id="ReportAll" TYPE="application/x-itst-activex"width="100%" height="100%"   <!--RA控件 -->      param_docsrc ="http://localhost/Public/rad/sample01.rad"  <!--报表文档url-->      param_datasrc="http://localhost/test/index.php/raserver" >  <!--报表数据(web服务器)url--></Object>
<4>编写提供动态数据的服务器程序

.PHP服务器程序的编写

下面重点介绍如何用php编写一个向ra控件提供报表数据的服务器程序

<1>数据格式

动态数据是以xml文件方式提供的,

假设我们要输出一个单位的部门清单,这个清单里有两列,第一列是部门编号ID,第二列是部门名称Name

报表数据实例:

<?xmlversion="1.0" encoding="UTF-8" ?><DocumentData>  <Detail>    <Row ID="1" Name="办公室" />    <Row ID="2" Name="财务科" />    <Row ID="3" Name="物资科" />    <Row ID="4" Name="综合科" />  </Detail></DocumentData>

要点是<Row/>,动态数据就藏身其中.

IDName都是fieldname即报表文档中引用动态数据的字段名称,等号后面是数据值

所以一行数据的格式就是

  <Row    数据1的字段名称="数据1的取值数据2的字段名称="数据2的取值......   />

<2>服务器程序的任务

服务器的任务就是根据请求的参数,从数据库中查询出数据,然后拼装成一个xml格式的字符串,并传递给请求者.

考虑到效率,对这种格式很清楚的xml数据的生成,没必要使用php中的SimpleXMLDomDocument工具,最好采用直接写的方式(这几种方式的效率比较见我的博文 PHP中3种生成XML文件方法的速度比较 )

privatefunction directWriteXml($d){
    $xmltext='<?xml version="1.0"encoding="UTF-8" ?>';
    $xmltext.='<DocumentData>';
    $xmltext .='<Detail>';
    foreach($d as $key=$value){

         $xmltext.=" <Row ID=\" {$key} \" Name=\"{$value]}\" />" ;

    }
   $xmltext.='</Detail>';
   $xmltext .='</DocumentData>';
   return$xmltext;
}

reportall工作方式图示






原创粉丝点击