在线生成合同信息,一个word文件里面有些信息需要通过数据库读取计算出并填写到word文档中最终显示在线pdf预览功能,接下来我交大家如果实现该需求
2、接下来实现如何替换文档内容
我们新建一个aa.docx的文档,里面放了一个变量信息
3、接下来使用php来替换这个变量信息代码如下
...
usePhpOffice\PhpWord\TemplateProcessor;
...
$path=storage_path('aa.docx');
//生成world存放目录
$filePath=storage_path('contract.docx');
//声明模板象并读取模板内容
$templateProcessor=newTemplateProcessor($path);
//替换模板内容
$templateProcessor->setValue('contract','北京乙方');//乙方
//生成新的world
$templateProcessor->saveAs($filePath);
...
usePhpOffice\PhpWord\TemplateProcessor;
...
$path=storage_path('aa.docx');
//生成world存放目录
$filePath=storage_path('contract.docx');
//声明模板象并读取模板内容
$templateProcessor=newTemplateProcessor($path);
//替换模板内容
$templateProcessor->setValue('contract','北京乙方');//乙方
//生成新的world
$templateProcessor->saveAs($filePath);
这样我们就完成了word里面模板变量的替换是不是比较简单呢
4、接下来我们需要处理word文档转为pdf我也在网上了查了比较多的资料,什么先转为html然后通过其它包的方式或者扩展来转pdf确实都能实现,但是有一点word转为html的时候格式会丢失这就和我们的需求有点偏离,后面转换了方向,使用工具来把word转为pdf这里我推荐的工具为unoconv安装方式如下
apt-getinstallunoconv
#如果报错请求服务器语言设置为LANG=”en_US.UTF-8″
#使用命令把word转为pdf
unoconv-fpdfaa.docx
#这个时候在当前目录下就会有一个aa.pdf的文件出来
#但是会发现如果是中文的情况下转出来的pdf是乱码该如何解决
5、pdf生成出来中文乱码解决方案,安装一个中文字体
#把电脑本机的宋体上传到服务器字体目录下/usr/share/fonts新建一个目录win或者其它,把中文字体上传到该目录下
apt-getinstallmkfontscale#安装这个工具
#进入到/usr/share/fonts/win/执行命令
mkfontscale&&sudomkfontdir&&sudofc-cache-fv
#然后重启服务器让字体生效
reboot
#最后在执行
unoconv-fpdfaa.docx
#看是不是中文乱码的问题解决了
6、使用php的执行shell的函数来调用该函数自动生成即可
shell_exec('/usr/binunoconv-fpdfaa.docx')
注:如php执行shell脚本命令不生效时,此处的问题是用户权限不正确导致不能执行该命令解决方案如下:
#编辑vim/etc/sudoers文件
rootALL=(ALL:ALL)ALL
www-dataALL=(ALL)ALL
%www-dataALL=(ALL)NOPASSWD:ALL
zhouyaoALL=(ALL)ALL
zhouyaoALL=(ALL)NOPASSWD:ALL
#增加用户zhouyao忽略执行命令需要密码
#增加用户组和用户zhouyao
useraddzhouyao-m#-m创建家目录
#更改php-fpm的用户和用户组
cd/etc/php/7.1/fpm/pool.d
vimwww.conf
user=zhouyao
group=zhouyao
#退出保存
重启php-fpm和nginx,此时在浏览器在执行该文件可以看到pdf下载下来了
#如pdf中下载的中文是乱码,请自行安装一个中文字体到服务器字体目录即可
|