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 zip文件解压类代码
Dec 02 PHP
用PHP获取Google AJAX Search API 数据的代码
Mar 12 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
Sep 12 PHP
使用php判断浏览器的类型和语言的函数代码
Feb 28 PHP
CI框架中数据库操作函数$this->db->where()相关用法总结
May 17 PHP
PHP搭建大文件切割分块上传功能示例
Jan 04 PHP
一个实用的php验证码类
Jul 06 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
Jul 10 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 PHP
PHP实现Redis单据锁以及防止并发重复写入
Apr 10 PHP
PHP implode()函数用法讲解
Mar 08 PHP
php设计模式之单例模式用法经典示例分析
Sep 20 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
在PWS上安装PHP4.0正式版
2006/10/09 PHP
PHP中多维数组的foreach遍历示例
2014/06/13 PHP
PHP使用PDO连接ACCESS数据库
2015/03/05 PHP
屏蔽PHP默认设置中的Notice警告的方法
2016/05/20 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
js中的replace方法使用介绍
2013/10/28 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
JavaScript中定义对象原型的两种使用方法
2016/12/15 Javascript
js模糊查询实例分享
2016/12/26 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
vue中Npm run build 根据环境传递参数方法来打包不同域名
2018/03/29 Javascript
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
详解vue路由篇(动态路由、路由嵌套)
2019/01/27 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
微信小程序实现下滑到底部自动翻页功能
2020/03/07 Javascript
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
python自动发邮件库yagmail的示例代码
2018/02/23 Python
详解Python3.6的py文件打包生成exe
2018/07/13 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
2019/06/26 Python
使用python实现男神女神颜值打分系统(推荐)
2019/10/31 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
TensorFlow固化模型的实现操作
2020/05/26 Python
2019史上最全Database工程师题库
2015/12/06 面试题
工作中的自我评价如何写好
2013/10/28 职场文书
公益广告标语
2014/06/19 职场文书
软件工程毕业生自荐信
2014/07/04 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
给老师的保证书怎么写
2015/05/09 职场文书
教学质量月活动总结
2015/05/11 职场文书
详解MySQL主从复制及读写分离
2021/05/07 MySQL
基于tensorflow权重文件的解读
2021/05/26 Python
解决使用了nginx获取IP地址都是127.0.0.1 的问题
2021/09/25 Servers
Python OpenCV实现图像模板匹配详解
2022/04/07 Python
PostgreSQL之连接失败的问题及解决
2023/05/08 PostgreSQL