PHP替换Word中变量并导出PDF图片的实现方法


Posted in PHP onNovember 26, 2020

在线生成合同信息,一个 word 文件里面有些信息需要通过数据库读取计算出并填写到 word 文档中最终显示在线 pdf 预览功能,接下来我交大家如果实现该需求

2、接下来实现如何替换文档内容

PHP替换Word中变量并导出PDF图片的实现方法

我们新建一个 aa.docx 的文档,里面放了一个变量信息

3、接下来使用 php 来替换这个变量信息 代码如下

...
 use PhpOffice\PhpWord\TemplateProcessor;
 ...
 
 $path = storage_path('aa.docx');
 // 生成world 存放目录
 $filePath = storage_path('contract.docx');
 // 声明模板象并读取模板内容
 $templateProcessor = new TemplateProcessor($path);
 // 替换模板内容
 $templateProcessor->setValue('contract', '北京乙方'); // 乙方
 
 // 生成新的 world
 $templateProcessor->saveAs($filePath);

这样我们就完成了 word 里面模板变量的替换是不是比较简单呢

4、接下来我们需要处理 word 文档转为 pdf 我也在网上了查了比较多的资料,什么先转为 html 然后通过 其它包的方式或者扩展来转 pdf 确实都能实现,但是有一点 word 转为 html 的时候格式会丢失这就和我们的需求有点偏离,后面转换了方向,使用工具来把 word 转为 pdf 这里我推荐的工具为 unoconv 安装方式如下

apt-get install unoconv
#如果报错请求服务器语言设置为 LANG=”en_US.UTF-8″
 
#使用命令把 word 转为 pdf
unoconv -f pdf aa.docx
#这个时候在当前目录下就会有一个 aa.pdf 的文件出来
#但是会发现如果是中文的情况下转出来的 pdf 是乱码该如何解决

5、pdf 生成出来中文乱码解决方案,安装一个中文字体

# 把电脑本机的宋体上传到服务器字体目录下 /usr/share/fonts 新建一个目录 win 或者其它,把中文字体上传到该目录下
 apt-get install mkfontscale #安装这个工具
 # 进入到/usr/share/fonts/win/ 执行命令
 mkfontscale && sudo mkfontdir && sudo fc-cache -fv
 # 然后重启服务器让字体生效
 reboot
 # 最后在执行
 unoconv -f pdf aa.docx
 # 看是不是中文乱码的问题解决了

6、使用 php 的执行 shell 的函数来调用该函数自动生成即可

shell_exec('/usr/binunoconv -f pdf aa.docx')

注:如 php 执行 shell 脚本命令不生效时,此处的问题是用户权限不正确导致不能执行该命令 解决方案如下:

# 编辑 vim /etc/sudoers文件
root ALL=(ALL:ALL) ALL
www-data ALL=(ALL) ALL
%www-data ALL=(ALL) NOPASSWD:ALL
 
zhouyao ALL=(ALL) ALL
zhouyao ALL=(ALL) NOPASSWD:ALL
# 增加用户zhouyao 忽略执行命令需要密码
# 增加用户组和用户zhouyao
useradd zhouyao -m # -m 创建家目录
# 更改php-fpm的用户和用户组
cd /etc/php/7.1/fpm/pool.d
vim www.conf
user = zhouyao
group = zhouyao
# 退出保存
重启php-fpm和nginx,此时在浏览器在执行该文件可以看到pdf下载下来了
# 如pdf中下载的中文是乱码,请自行安装一个中文字体到服务器字体目录即可

总结

到此这篇关于PHP替换Word中变量并导出PDF图片的实现方法的文章就介绍到这了,更多相关PHP替换Word变量并导出PDF图片内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
php中数据的批量导入(csv文件)
Oct 09 PHP
php 什么是PEAR?(第三篇)
Mar 19 PHP
UCenter Home二次开发指南
May 28 PHP
php 常用类整理
Dec 23 PHP
在IIS7.0下面配置PHP 5.3.2运行环境的方法
Apr 13 PHP
php数组函数序列之array_combine() - 数组合并函数使用说明
Oct 29 PHP
PHP详解ASCII码对照表与字符转换
Dec 05 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
Feb 05 PHP
PHP5.5在windows安装使用memcached服务端的方法
Apr 16 PHP
CI框架验证码CAPTCHA辅助函数用法实例
Nov 05 PHP
php可生成缩略图的文件上传类实例
Dec 17 PHP
PHP实现用session来实现记录用户登陆信息
Oct 15 PHP
PHP扩展安装方法步骤解析
Nov 24 #PHP
Cookie跨域问题解决方案代码示例
Nov 24 #PHP
PHP执行linux命令6个函数代码实例
Nov 24 #PHP
PHP获取真实IP及IP模拟方法解析
Nov 24 #PHP
Thinkphp极验滑动验证码实现步骤解析
Nov 24 #PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
Nov 23 #PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
Nov 22 #PHP
You might like
PHP 面向对象实现代码
2009/11/11 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
PHP 7的一些引人注目的新特性简单介绍
2015/11/08 PHP
JavaScript Array扩展实现代码
2009/10/14 Javascript
AJAX分页的代码(后台asp.net)
2011/02/14 Javascript
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
javascript实现div的显示和隐藏的小例子
2013/06/25 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
2013/07/31 Javascript
原生Javascript封装的一个AJAX函数分享
2014/10/11 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
js实现宇宙星空背景效果的方法
2015/03/03 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
2015/08/24 Javascript
如何重置vue打印变量的显示方式
2017/12/06 Javascript
Python版实现微信公众号扫码登陆
2020/05/28 Javascript
Element Tooltip 文字提示的使用示例
2020/07/26 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
2020/08/13 Javascript
[02:36]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma 选手采访
2021/03/11 DOTA
Python队列的定义与使用方法示例
2017/06/24 Python
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
2017/12/12 Python
Python简单计算数组元素平均值的方法示例
2017/12/26 Python
python+tkinter编写电脑桌面放大镜程序实例代码
2018/01/16 Python
Python迭代器和生成器定义与用法示例
2018/02/10 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
用Python生成HTML表格的方法示例
2020/03/06 Python
如何使用Cython对python代码进行加密
2020/07/08 Python
英国顶级水晶珠宝零售商之一:Tresor Paris
2019/04/27 全球购物
护士演讲稿优秀范文
2014/04/30 职场文书
史学专业毕业生求职信
2014/05/09 职场文书
大学生社会实践活动总结
2014/07/03 职场文书
优秀党员自我评价范文
2014/09/15 职场文书
拾金不昧感谢信
2015/01/21 职场文书
2019年公司卫生管理制度样本
2019/08/21 职场文书
实操Python爬取觅知网素材图片示例
2021/11/27 Python
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript