PHPWord 导出简历经验小结

释放双眼,带上耳机,听听看~!

最近做的一个招聘的项目含有word导出功能 遇到的一些坑在这里总结一下

首先要引入资源包
composer require phpoffice/phpword
引入之后在自己的要写导出方法文件头引用
use PhpOffice\PhpWord\TemplateProcessor;
然后准备一个模板word文件
记住是.docx格式的,.doc格式的容易出现读取不了文件的现象
我准备的文件如下
文档中需要替换的变量${变量名}来表示

循环块要用${tag}开始用${/tag}结束
写出的最后效果如下

PHPWord 导出简历经验小结

然后就是php代码部分了

     /**
     * 简历导出
     *
     * @param [type] $ids
     * @return void
     */
    public function export($ids)
    {
        //找到模板文件的位置
        $path  = __DIR__.'/resume.docx';
        // 实例化
        $templateProcessor = new TemplateProcessor($path);
        //数据获取
        $data = $this->model->get($ids);
        $worklist = Db::name('work_history')->where('user_id',$ids)->select();
        $worknum = Db::name('work_history')->where('user_id',$ids)->count();
        $edulist = Db::name('edu_history')->where('user_id',$ids)->select();
        $edunum = Db::name('edu_history')->where('user_id',$ids)->count();
        //基础信息填写替换
        $templateProcessor->setValue('name', $data['nickname']);
        $templateProcessor->setValue('age', $data['age']);
        $templateProcessor->setValue('email', $data['email']);
        $templateProcessor->setValue('mobile', $data['mobile']);
        $templateProcessor->setValue('gender', $data['gender_text']);
        $templateProcessor->setValue('address', $data['address']);
        $templateProcessor->setValue('native_place', $data['native_place']);
        $templateProcessor->setValue('emc', $data['emc']);
        $templateProcessor->setValue('emc_mobile', $data['emc_mobile']);
        $templateProcessor->setValue('bio', $data['bio']);
        //工作经历
        $templateProcessor->cloneBlock('WORKBLOCK',$worknum,true,true);
        // $templateProcessor->cloneRow('post_content',$worknum);
        foreach ($worklist as $key => $item) {
            $key +=1;
            $templateProcessor->setValue('times#'.$key, $item['join_time']);
            $templateProcessor->setValue('com_name#'.$key, $item['work_units']);
            $templateProcessor->setValue('job#'.$key, $item['job']);
            $templateProcessor->setValue('post_content#'.$key, $item['post_content']);
        }

        //教育经历
        $templateProcessor->cloneRow('school_name',$edunum);
        foreach ($edulist as $key => $item) {
            $key +=1;
            $templateProcessor->setValue('school_name#'.$key, $item['school_name']);
            $templateProcessor->setValue('school_type#'.$key, $item['eductional_systme']);
            $templateProcessor->setValue('major#'.$key, $item['major']);
            $templateProcessor->setValue('join_time#'.$key, $item['times']);
        }
        $templateProcessor->saveAs('./uploads/resume/'.$data['nickname'].'.docx');
        // halt($_SERVER);
        $this->redirect('http://'.$_SERVER['HTTP_HOST'].'/uploads/resume/'.$data['nickname'].'.docx');
    }

这里再提一下官方的文档中关于块克隆的案例是非常简单的demo
PHPWord 导出简历经验小结
就是这样的 克隆一个 段落就完事儿了????
没办法 我只能去看源码 看能不能找到一些蛛丝马迹
PHPWord 导出简历经验小结
我开始一直用cloneBlock传的参数和cloneRow一样 就是只传 变量名和重复次数 后来才发现原来才发现有个indexVariables的参数
这个参数的作用就是 设置为true的时候就可以跟cloneRow一样 生成变量的索引

有了这个就能生成最后的成果
PHPWord 导出简历经验小结

给TA打赏
共{{data.count}}人
人已打赏
php笔记

PHP获取一篇文章内容中的全部图片并下载函数

2019-4-10 16:38:02

php笔记

[转]PHP优秀资源,都给你整理好了

2019-6-13 17:44:56

1 条回复 A文章作者 M管理员
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索