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版(2)
Oct 09 PHP
PHP新手上路(二)
Oct 09 PHP
PHP 下载文件时自动添加bom头的方法实例
Jan 10 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
May 10 PHP
Codeigniter整合Tank Auth权限类库详解
Jun 12 PHP
跟我学Laravel之视图 & Response
Oct 15 PHP
PHP中__FILE__、dirname与basename用法实例分析
Dec 01 PHP
php中strtotime函数性能分析
Nov 20 PHP
php从身份证获取性别和出生年月
Feb 09 PHP
Yii2实现UploadedFile上传文件示例
Feb 15 PHP
thinkPHP框架整合tcpdf插件操作示例
Aug 07 PHP
PHP中quotemeta()函数的用法讲解
Apr 04 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
关于查看MSSQL 数据库 用户每个表 占用的空间大小
2013/06/21 PHP
PHP函数getenv简介和使用实例
2014/05/12 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
2017/05/15 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
2017/07/19 PHP
两个DIV等高的JS的实现代码
2007/12/23 Javascript
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
JavaScript中的关键字"VAR"使用详解 分享
2013/07/31 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
2013/11/04 Javascript
jQuery中$.each使用详解
2015/01/29 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
JavaScript中关联原型链属性特性
2016/02/13 Javascript
使用jQuery调用XML实现无刷新即时聊天
2016/08/07 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
laravel5.4+vue+element简单搭建的示例代码
2017/08/29 Javascript
Javascript中prototype与__proto__的关系详解
2018/03/11 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
2018/08/20 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
2018/10/07 Javascript
vue中使用protobuf的过程记录
2018/10/26 Javascript
vue实现路由懒加载及组件懒加载的方式
2019/06/11 Javascript
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
微信小程序实现消息框弹出动画
2020/04/18 Javascript
jquery 回调操作实例分析【回调成功与回调失败的情况】
2019/09/27 jQuery
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
使用Python标准库中的wave模块绘制乐谱的简单教程
2015/03/30 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
2018/12/24 Python
Python jieba库用法及实例解析
2019/11/04 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
django中related_name的用法说明
2020/05/20 Python
python函数map()和partial()的知识点总结
2020/05/26 Python
Python之字典对象的几种创建方法
2020/09/30 Python
Move Free官方海外旗舰店:美国骨关节健康专业品牌
2017/12/06 全球购物
本溪水洞导游词
2015/02/11 职场文书
Nginx工作模式及代理配置的使用细节
2022/03/21 Servers