前段时间在开发项目过程中因业务需求,要实现生成word文档并下载下来,第一次想到的页面html直接生成word文档,但在调试过程中发现很麻烦,因为数据动态获取要刷新页面,用户体验不好,后来看了写资料,直接通过php后台生成word并下载下来,经过一番测试,表现很完美,现在分享给大家。
1.功能需求描述
点击html页面某个按钮然后就生成word直接下载下来。

2.php生成woerd文档并下载下来源码

    public function getWord(){
        $id   = I('id','','trim');
        $info = D('Sqyy')
            ->alias('S')
            ->join('__XL__ X ON X.id = S.xl_id ')
            ->join('__LS__ L ON L.id = S.teacher_id ')
            ->where(array('S.id'=>$id,'S.status'=>1))
            ->field('S.*,X.name name,L.name teacher_name')
            ->find();
        $time = date("Y-m-d H:i:s",$info['add_time']);
        $str  = '<div class=" box text-center">
<div>
<p>姓名:'.$info['xm'].'</p>
<p>性别:'.$info['xb'].'</p>
<p>学号:'.$info['xgh'].'</p>
<p>学院:'.$info['yxsmc'].'</p>
<p>班级:'.$info['classname'].'</p>
<p>咨询老师:'.$info['teacher_name'].'</p>
<p>咨询时间:'.$info['rq'].'/'.$info['sjd'].'</p>
<p>问题类型:'.$info['name'].'</p>
<p>基本情况:'.$info['jiben'].'</p>
<p>主诉内容:'.$info['zhusu'].'</p>
<p>初步评估及建议:'.$info['jianyi'].'</p>
</div>
</div>';
        $fileName = '文件中心'.time().'.doc';
        $this->downloadWord($str, $fileName);
    }

    public function downloadWord($content, $fileName='new_file.doc'){
        if(empty($content)){ return;}
        header("Cache-Control: no-cache, must-revalidate");
        header("Pragma: no-cache");
        header("Content-Type: application/octet-stream");
        header("Content-Disposition: attachment; filename=$fileName");
        $html = '<html xmlns:v="urn:schemas-microsoft-com:vml"
         xmlns:o="urn:schemas-microsoft-com:office:office"
         xmlns:w="urn:schemas-microsoft-com:office:word" 
         xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" 
         xmlns="http://www.w3.org/TR/REC-html40">';
        $html .= '<head><meta charset="UTF-8" /></head>';
        echo $html . '<body>'.$content .'</body></html>';
    }