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 相关文章推荐
动态新闻发布的实现及其技巧
Oct 09 PHP
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
Nov 18 PHP
php下关于Cannot use a scalar value as an array的解决办法
Aug 08 PHP
php/js获取客户端mac地址的实现代码
Jul 08 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
Jun 12 PHP
PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
Sep 24 PHP
PHP检测用户语言的方法
Jun 15 PHP
php面向对象与面向过程两种方法给图片添加文字水印
Aug 26 PHP
浅谈PHP中的错误处理和异常处理
Feb 04 PHP
form自动提交实例讲解
Jul 10 PHP
PHP+Apache环境中如何隐藏Apache版本
Nov 24 PHP
tp5递归 无限级分类详解
Oct 18 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
header()函数使用说明
2006/11/23 PHP
PHP中require和include路径问题详解
2014/12/25 PHP
php+Ajax无刷新验证用户名操作实例详解
2019/03/04 PHP
javascript多种数据类型表格排序代码分析
2010/09/11 Javascript
IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性
2011/08/28 Javascript
深入理解JavaScript是如何实现继承的
2013/12/12 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
深入理解Angularjs中的$resource服务
2016/12/31 Javascript
Javascript刷新页面的实例
2017/09/23 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
js中Object.defineProperty()方法的不详解
2018/07/09 Javascript
微信小程序项目实践之九宫格实现及item跳转功能
2018/07/19 Javascript
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
JS数组求和的常用方法实例小结
2019/01/07 Javascript
js实现简单掷骰子效果
2019/10/24 Javascript
Vue-router 报错NavigationDuplicated的解决方法
2020/03/31 Javascript
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
2020/08/06 Javascript
Python reduce()函数的用法小结
2017/11/15 Python
python笔记_将循环内容在一行输出的方法
2019/08/08 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
python实现大量图片重命名
2020/03/23 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
Scrapy框架实现的登录网站操作示例
2020/02/06 Python
python 爬虫如何正确的使用cookie
2020/10/27 Python
PHP面试题及答案一
2012/06/18 面试题
理工大学毕业生自荐信
2013/11/01 职场文书
总裁办公室主任职责
2014/01/02 职场文书
高中军训广播稿
2014/01/14 职场文书
5.1手机促销活动
2014/01/17 职场文书
交通事故调解协议书
2014/04/16 职场文书
学雷锋树新风演讲稿
2014/05/10 职场文书
2015年大学教师工作总结
2015/05/20 职场文书
大学文艺委员竞选稿
2015/11/19 职场文书
python opencv检测直线 cv2.HoughLinesP的实现
2021/06/18 Python
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python