背景说明
在一些项目中,经常会出现这样的需求
- 用户上传了word或者excel文件,需要审核或者查看这些文件内容的时候,总不能一个一个下载吧,那样用户是很难接受的,因此需要一个word,excel,甚至ppt预览的功能,一般的方案都是把word和excel转成pdf然后前端就可以直接预览了,ppt的话,还需要转成图片。
- 一些电子协议的场景需求,例如去注册公司的时候使用的就是电子协议,需要使用银行的U盾签名然后提交审核,电子协议一般都是使用pdf进行签名,签名后锁定,修改即失效。
- 为了安全考虑,许多协议上面都需要加上水印,为了重要信息的泄露的追责
对于这样的一些需求,如果没做过很容易一头雾水不知道该怎么办,其实有很多工具可以使用,综合起来就可以实现word,excel,pdf,ppt之间的各种操作了,ppt我这里还没有做过这种需求,先不介绍了,主要介绍word和pdf的操作,其他的原理也是类似。
工具介绍
word模板变量替换工具:phpword库中的 \PhpOffice\PhpWord\TemplateProcessor 类
地址:https://packagist.org/packages/phpoffice/phpword
word,excel转pdf的工具:libreoffice软件,linux和windows上都适用,样式什么的目前没发现转了之后有变化的,但是phpword虽然提供了转的方法,但是兼容性试了一下太差了。
地址:https://www.libreoffice.org/download/download/
操作pdf的工具:Fpdi库,目前php操作pdf功能最全的库
地址:https://packagist.org/packages/setasign/fpdi
示例代码
- word模板的内容替换
首先需要在word文件中加入 ${name} 这样的内容用于替换,然后就可以使用TemplateProcessor找出该替换的地方,并替换上需要的值
$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor($filePath);
$variableList = $templateProcessor->getVariables();
foreach ($variableList as