在THINKPHP中使用GridReport实现快递打印

浏览:16628 发布日期:2014/07/26 分类:技术分享 关键字: 快递打印
看了一个会员找快递单打印的源码,以下我是打印微信支付发货单时所用的(申通)源码,愿对您有所帮助    public function weixin_orders_print() {
        $id = I ( 'id' );
        $this->assign ( 'id', $id );
        
        $model = new WeixinApipayOrdersModel ();
        $orderArray = $model->get_info_byid ( $id );
        
        // dump($orderArray);
        
        // 打印测试===========================================
        // 设置报表标题
        $orderArray ['reportTitle'] = '这是用户基本表';
        
        // 报表中要得到的数据格式
        $xmlReportData = get_reports_xml_byarray ( $orderArray );
        $this->assign ( 'xmlReportData', $xmlReportData );
        // 要打印的报表文件
        $reportName = 'kdd_shentong.grf';
        $this->assign ( 'reportName', $reportName );
        
        // ===========================================
        
        // put_log($xmlReportData);
        
        // 显示模板
        $this->display ( 'Weixin:weixin_orders_print' );
    }
HTML<include file="Public:header" />

<ul class="toolbar">
    <li>

        <button type="button" onclick="printView();" class="button button-danger" >
            <i class="icon-print icon-white"></i> 打印报表
        </button>
    </li>
</ul>

<script type="text/javascript">
    //打印报表函数 建立报表对象
    CreateReport("Report");
    function printView() {
        //读取报表模版
        Report.LoadFromURL("__ROOT__/Data/reports/_ReadReport.php?report={$reportName}&t={$thisTime}");
        //加载报表数据
        Report.LoadDataFromXML("{$xmlReportData}");
        //打印预览
        Report.PrintPreview(true);
    };
</script>
<include file="Public:footer" />
注意: header文件中需要引用GridReport的JS,如下
<script src="__ROOT__/Public/GridReport/CreateControl.js" type="text/javascript"></script>

如下效果图



打印


这里要注意的是
一.GridReport在打印预览的时候会出现"锐浪报表尚未注册"字样,但实际打印不会
二.所用的报表JS为了适应THINKPHP,需要稍做修改(主要是为了缓存刷新)
三.报表的数据源是xml格式,为了方便,我新增了一个get_reports_xml_byarray函数, 代码如下/**
 * 将数组转化为可用的报表格式
 *
 * @param unknown $array            
 * @return string
 */
function get_reports_xml_byarray($array) {
    $XMLText = "<report>";
    
    // 得到报表明细字段
    $XMLText .= "<rows>";
    foreach ( $array ['rows'] as $key => $value ) {
        $XMLText .= "<row>";
        foreach ( $value as $keySub => $valueSub ) {
            $XMLText .= "<" . $keySub . ">" . $valueSub . "</" . $keySub . ">";
        }
        $XMLText .= "</row>";
    }
    $XMLText .= "</rows>";
    
    // 得到报表的其它参数
    $XMLText .= "<_grparam>";
    foreach ( $array as $key => $value ) {
        if (! is_array ( $value )) {
            $XMLText .= "<" . $key . ">" . $value . "</" . $key . ">";
        }
    }
    $XMLText .= "</_grparam>";
    
    $XMLText .= "</report>";
    
    return $XMLText;
}
可以在线设计的,在设计保存时,首次保存会出错,可以不管,会在相关目录下生成报表的GRF文件. 设计后即可调用打印.

许多初学者会发现改过后的报表在打印时还是原来的格式,这是由于浏览器缓存造成, 请下载我改过的相关文件使用可以避免这一情况

我改过后的文件在这里无法上传,请移步到这里下载
http://www.abis.com.cn/thread-1226-1-1.html
最佳答案
评论( 相关
后面还有条评论,点击查看>>