使用背景
之前客户要导出签证的word信息用来做签证使用,当时就使用了MDWORd,最近客户又要导出退款确认单,毫不犹豫 又掏出了MDWORD 不得不说对于需要母版的WORD生成操作来说已经很简单了
母版
在图中可以看出,使用了WORD批注的功能,将需要修改的地方都进行了批注,之后在代码中我们会使用批注作为变量 也就是key值来对母版进行赋值.
实操
安装MDWORD
composer require mkdreams/mdword
代码
/**
* @param $templateFile 模版文件source
* @param $saveFile 保存文件source
* @param $data 数据源
* 以MDWord为基础,导出Word
*/
static function createAttachmentWordOne($saveFile,$data){
//new出一个新对象
$TemplateProcessor = new WordProcessor();
// 母版文件地址(要注意的是这里文件必须可读取,要注意文件权限)
$template = './uploads/attachment1.docx';
// 加载模板文件
$TemplateProcessor->load($template);
// 这里clones 的作用是将item批注的内容复制count($data)份
$TemplateProcessor->clones('item' ,count($data));
// 标记位置
$flag = -1;
//循环数据
foreach ($data as $key => $value){
$flag++;
//与item同理
$TemplateProcessor->clones('content#' . $flag,count($value));
// 设置country批注的值,要注意的是clones之后要选中具体某个country 格式为: 变量名# + 下标
$TemplateProcessor->setValue("country#" . $flag,$value[0]['nationality']);
$TemplateProcessor->setValue("number#" . $flag,count($value));
foreach ($value as $k => $v){
// 由于name被clones两次,所以这里有两层# 第一层指的是第一次复制的位置,第二个#同理,如果还有多层,则依次类推
$TemplateProcessor->setValue("name#" . $flag . '#' . $k,$v['family_name_en'] .' ' . $v['name_en']);
$TemplateProcessor->setValue("idNumber#" . $flag . '#' . $k,$v['id_number']);
$TemplateProcessor->setValue("company#" . $flag . '#' . $k,$v['company_name_en']);
$TemplateProcessor->setValue("postion#" . $flag . '#' . $k,$v['postion_en']);
}
}
//保存生成好的文件
$TemplateProcessor->saveAs('./uploads/' . $saveFile);
}
项目背景为tp5.0+php7.0.
其他案例可参考码云