使用phpword生成word文档的两种方式

这篇文章主要介绍了使用phpword生成word文档的两种方式,直接使用代码编写word文档和读取原有word模板,替换相关变量这两种方法,并通过代码示例给大家讲解的非常详细,需要的朋友可以参考下
使用phpword生成文档有两种方式

直接使用代码编写word文档,用代码生成word,但是设置样式,格式,图片非常麻烦,不建议使用。如果客户或产品提供一份word的样式,我们也难以完全复原,调样式很头疼的。
读取原有word模板,替换相关变量。个人感觉这种方式能满足绝大部分需求,实现起来也比较简单,所有的样式,格式直接在word模板里设置好,替换变量就可以了,还可以很方便的切换模板。本文主要介绍这种方式,毕竟我们是为了快速实现客户的需求,让客户提供一份word模板,我们稍微一改就可以了。
开始干活

1,通过composer安装phpword包

composer require phpoffice/phpword

2,准备一个word模板(让客户或产品提供吧,docx格式的)

$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++;
 
    }
 
}

有时我们需要有“陈列奖励”数据时就显示没有时就不显示,此里需要用到块标签了与html类似

// 陈列奖励
 
// 循环替换
 
$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++;
 
    }
 
}

替换图片

// 只渲染
 
$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);
一些常用的word符号

换行符 <w:br/>

分页符 <w:br w:type="page"/>

制表符 <w:tab/>

html预留字符要替换为实体字符,如&要替换为&,可以使用htmlspecialchars()

使用方式

比如我们数据库存的换行符一般是 \n\r 这个在word中是无效的,要替换为 <w:br/> 才行

$content = str_replace("\r\n", '<w:br />', $content);
 
$doc->setValue('content', $content); //内容

到此这篇关于使用phpword生成word文档的两种方式的文章就介绍到这了,更多相关phpword生成word文档内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持vb.net教程C#教程python教程SQL教程access 2010教程xin3721自学网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHPWord Beta 0.6.2 开发者指南 目 录 首先我们要了解文档最基本的信息和设置: 4 计量单位:缇(twips) 4 字体设置 4 文档属性设置 4 新建文档 5 添加页面 5 页面样式 5 页面样式属性 6 文本 7 添加文本 7 添加文本资源 7 文本样式 8 样式属性列表 9 添加换行符 10 添加分页符 10 列表 10 添加列表 10 列表样式 11 列表样式属性列表 11 超链接 11 添加超链接 11 超链接样式 12 图片 13 添加图片 13 图片样式 13 图片样式属性 13 添加GD生成图片 14 添加水印 14 添加对象 15 添加标题 15 添加目录 16 表格 17 添加表格 17 添加行 17 添加单元格 17 单元格样式 19 表格样式 20 页脚 22 页眉 23 模版 23 其他问题修改 25 解决文本缩进问题 25 表格对齐和表格缩进 27 图片缩进和绝对相对悬浮定位 30 首先我们要了解文档最基本的信息和设置:  因为是国外编辑的类库,存在对中文支持的问题,使用前,我们需要进行一些修正: 1、解决编码问题,PHPword 会对输入的文字进行utf8_encode编码转化,如果你使用GBK、GB2312或者utf8编码的话就会出现乱码,如果你用utf8编码,就查找类库中所有方法中的 utf8_encode 转码将其删除,如果你采用GBK或者GB2312编码,使用iconv进行编码转换。 2、解决中文字体支持,在writer/word2007/base.php中 312行添加 $objWriter->writeAttribute('w:eastAsia',$font) 3、启动php zip支持,windows环境下在php配置文件php.ini中,将extension=php_zip.dll前面的分号“;”去除;(如果没有,请添加extension=php_zip.dll此行并确保php_zip.dll文件存在相应的目录),然后同样在php.ini文件中,将 zlib.output_compression = Off 改为zlib.output_compression = On ; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值