1. 依赖phpword 首先通过composer安装phpword包
composer require phpoffice/phpword
2. 准备一个word模板(让客户或产品提供吧,docx格式的)
将word文档存入项目中(位置可以自定义)
将需要填写的word文档的位置先用变量占位
下一步我们利用phpword方法替换变量就行
3. 创建合同模版
此处的合同模板在laravel框架下 一般默认在public目录下存放
$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor("online1w.doc");
4. 开始替换变量
//此处替换word文档中的对应变量值
$templateProcessor->setValue('JName', '测试');
$templateProcessor->setValue('JIDCode', '测试');
$templateProcessor->setValue('JLegalRepresentative', '测试');
。。。。。。。。
//创建文件名
$filename = date("YmdHis") . ".docx";
//保存word 存放位置可以自定义
$templateProcessor->saveAs(public_path("uploads/doc/" . $filename));
5. 保存后生成的word
生成后的word将会替换word文档,如下图
6. 如果遇到表格样式的 需要做进一步处理
假如我们需要生成的表格为以下
下面我们需要将填写的位置先用变量占位 如下图
7.替换表格中的变量
$arr_onef = [];
for ($a=0;$a<count($FJname);$a++){
$ar_two['FJname'] = $FJname[$a];
$ar_two['FJbrand'] = $FJbrand[$a];
$ar_two['FJunit'] = $FJunit[$a];
$ar_two['FJnumber'] = $FJnumber[$a];
array_push($arr_onef,$ar_two);
}
//上面是查询需要赋值的数据总数
$rows=count($arr_onef);//总行数
//克隆行 第一个参数为表格中的某列的字段 第二个参数为需要克隆的行数
$templateProcessor->cloneRow('FJname',$rows);//复制行
for($i=0;$i<$rows;$i++){
$templateProcessor->setValue("FJname#".($i+1),$arr_onef[$i]['FJname']);//替换变量
$templateProcessor->setValue("FJbrand#".($i+1),$arr_onef[$i]['FJbrand']);
$templateProcessor->setValue("FJunit#".($i+1),$arr_onef[$i]['FJunit']);
$templateProcessor->setValue("FJnumber#".($i+1),$arr_onef[$i]['FJnumber']);
}
8.运行后的结果
现在就操作完成啦,生成的文档可在设置的文件目录下查看,有问题欢迎大家留言一起讨论