使用phpword天生文档有两种方式
- 直接使用代码编写word文档,用代码天生word,但是设置样式,格式,图片非常贫困,不建议使用。如果客户或产品提供一份word的样式,我们也难以完全复原,调样式很头疼的。
- 读取原有word模板,更换相关变量。个人感觉这种方式能满足绝大部分需求,实现起来也比力简朴,全部的样式,格式直接在word模板里设置好,更换变量就可以了,还可以很方便的切换模板。本文重要先容这种方式,毕竟我们是为了快速实现客户的需求,让客户提供一份word模板,我们稍微一改就可以了。
开始干活
1,通过composer安装phpword包
[code]composer require phpoffice/phpword[/code]
2,预备一个word模板(让客户或产品提供吧,docx格式的)

[code]$tpl = 'template/word/display_agreement.docx';
$doc = new TemplateProcessor($tpl);//打开模板
// 简朴更换
$doc->setValue('dealer_name', $oneCust->dealer->dealer_name, 2);//更换变量 第二个参数更换次数
$doc->setValue('cust_name', $oneCust->customer->cust_name);//更换变量cust_name
$doc->setValue('start_time', $arrOneCust['start_time_text']);
$doc->setValue('end_time', $arrOneCust['end_time_text']);
$doc->setValue('show_day', $arrOneCust['show_day']);
$doc->setValue('signing_date', date('Y年m月d日', $arrOneCust['create_at']));
// 陈列要求
// 循环更换
$arr = [
['goods_name'=>'苹果手机8','specs'=>'128G','number'=>'2台'],
['goods_name'=>'苹果手机11','specs'=>'128G','number'=>'2台'],
['goods_name'=>'苹果手机12','specs'=>'128G','number'=>'2台'],
]
if (!empty($arr)) {
$j = 1;
$rows = count($arr);
$doc->cloneRow('customergoods_name', $rows);//复制行
foreach ($arr as $oneGoods) {
$dTmp = $oneGoods->toArray();
$doc->setValue("customergoods_name#" . $j, "产品名称:{$oneGoods['goods_name']}");//更换变量
$doc->setValue("customergoods_spce#" . $j, "产品规格:{$oneGoods['specs']}");//更换变量
$doc->setValue("customergoods_num#" . $j, "数量:{$oneGoods['number']}");//更换变量
$j++;
}
}[/code]
有时我们必要有“陈列嘉奖”数据时就体现没有时就不体现,此里必要用到块标签了与html类似

[code]// 陈列嘉奖
// 循环更换
$arr = [
['goods_name'=>'苹果手机8','time'=>'1606011063','number'=>'2台'],
['goods_name'=>'苹果手机11','time'=>'1606011063','number'=>'2台'],
['goods_name'=>'苹果手机12','time'=>'1606011063','number'=>'2台'],
]
$doc->cloneBlock('WIN_BLOCK',0);
if (!empty($arr)) {
//体现块
$doc->cloneBlock('WIN_BLOCK',1);
$j = 1;
$rows = count($arr);
$doc->cloneRow('customergoods_name', $rows);//复制行
foreach ($onePhase->customerGoodList as $oneGoods) {
$doc->setValue("phase_date#" . $j, date('Y-m-d', $onePhase['time']));//更换变量
$doc->setValue("phase_type#" . $j, '兑付');//更换变量
$doc->setValue("phase_goods#" . $j, $oneGoods['goods_name']);//更换变量
$doc->setValue("phase_num#" . $j, "数量:{$oneGoods['number']}");//更换变量
$j++;
}
}[/code]
更换图片
[code]// 只渲染
$tmp->setImageValue('header',['path'=>'1.jpeg']);
// 设置图片宽高
$tmp->setImageValue('header', ['path' => '1.jpg','width'=>500,'height'=>500]);
// 设置多次更换
$tmp->setImageValue('header', ['path' => '1.jpg','width'=>500,'height'=>500],3);
[/code]
一些常用的word符号
换行符 <w:br/>
分页符 <w:br w:type="page"/>
制表符 <w:tab/>
html预留字符要更换为实体字符,如&要更换为&,可以使用htmlspecialchars()
使用方式
比如我们数据库存的换行符一样平常是 \n\r 这个在word中是无效的,要更换为 <w:br/> 才行
[code]$content = str_replace("\r\n", '<w:br />', $content);
$doc->setValue('content', $content); //内容[/code]
到此这篇关于使用phpword天生word文档的两种方式的文章就先容到这了,更多相关phpword天生word文档内容请搜索脚本之家从前的文章或继续浏览下面的相关文章盼望各人以后多多支持脚本之家! 来源:https://www.jb51.net/program/317152mso.htm 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |