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 相关文章推荐
一个用于MySQL的PHP XML类
Oct 09 PHP
网站加速 PHP 缓冲的免费实现方法
Oct 09 PHP
谈谈PHP语法(4)
Oct 09 PHP
php 遍历数据表数据并列表横向排列的代码
Sep 05 PHP
解析link_mysql的php版
Jun 30 PHP
php实现监听事件
Nov 06 PHP
thinkphp实现多语言功能(语言包)
Mar 04 PHP
php实现html标签闭合检测与修复方法
Jul 09 PHP
6个超实用的PHP代码片段
Aug 10 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
kindeditor 加入七牛云上传的实例讲解
Nov 12 PHP
laravel 实现根据字段不同值做不同查询
Oct 23 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导出Redis数据到另一个Redis中的代码
2014/03/12 PHP
php使用iconv中文截断问题的解决方法
2015/02/11 PHP
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
thinkPHP5项目中实现QQ第三方登录功能
2017/10/20 PHP
laravel5使用freetds连接sql server的方法
2018/12/07 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
form中限制文本字节数js代码
2007/06/10 Javascript
json简单介绍
2008/06/10 Javascript
JavaScript 学习技巧
2010/02/17 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
2016/09/05 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
Angular中的$watch、$watchGroup、$watchCollection
2017/06/25 Javascript
VUE利用vuex模拟实现新闻点赞功能实例
2017/06/28 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
2019/04/14 Javascript
解析JS在获取当前月的最后一天遇到的坑
2019/08/30 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
JavaScript的垃圾回收机制与内存管理
2020/08/06 Javascript
antd design table更改某行数据的样式操作
2020/10/31 Javascript
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
python字符串中匹配数字的正则表达式
2019/07/03 Python
Python加密模块的hashlib,hmac模块使用解析
2020/01/02 Python
详解CSS3的opacity属性设置透明效果的用法
2016/05/09 HTML / CSS
英国Zoro工具:手动工具,电动工具和个人防护用品
2016/11/02 全球购物
法国足球商店:Footcenter
2019/07/06 全球购物
旅游项目开发策划书
2014/01/18 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
环境保护建议书
2014/08/26 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
物业公司管理制度
2015/08/05 职场文书
致男子1500米运动员的广播稿
2019/11/08 职场文书
温馨祝福晨语:美丽的一天从我的问候开始
2019/11/28 职场文书
go web 预防跨站脚本的实现方式
2021/06/11 Golang
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS