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
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
Aug 02 PHP
wamp下修改mysql访问密码的解决方法
May 07 PHP
PHP保存带BOM文件的方法
Feb 12 PHP
简单谈谈PHP vs Node.js
Jul 17 PHP
PHP使用fopen与file_get_contents读取文件实例分享
Mar 04 PHP
Yii隐藏URL中index.php的方法
Jul 12 PHP
thinkPHP订单数字提醒功能的实现方法
Dec 01 PHP
php上传excel表格并获取数据
Apr 27 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
php二维数组按某个键值排序的实例讲解
Feb 15 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 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
在IIS上安装PHP4.0正式版
2006/10/09 PHP
PHP文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
php多次include后导致全局变量global失效的解决方法
2015/02/28 PHP
功能强大的php文件上传类
2016/08/29 PHP
php获取远程图片并下载保存到本地的方法分析
2016/10/08 PHP
php获取网站根目录物理路径的几种方法(推荐)
2017/03/04 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
2017/11/21 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
JS是按值传递还是按引用传递
2015/01/30 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
详解React中的组件通信问题
2017/07/31 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
2019/05/16 Javascript
jQuery 淡入/淡出效果函数用法分析
2020/05/19 jQuery
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
[01:14:31]Secret vs VG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python计算方程式根的方法
2015/05/07 Python
python正则表达式re之compile函数解析
2017/10/25 Python
Python反射用法实例简析
2017/12/22 Python
set在python里的含义和用法
2019/06/24 Python
python交易记录整合交易类详解
2019/07/03 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
2020/02/07 Python
jupyter notebook 增加kernel教程
2020/04/10 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
python 监控logcat关键字功能
2020/09/04 Python
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
英国户外装备和冒险服装零售商:alloutdoor
2018/01/30 全球购物
幼儿教师国培感言
2014/02/19 职场文书
服务宗旨标语
2014/07/01 职场文书
亮剑精神观后感
2015/06/05 职场文书
会议开幕致辞怎么写
2016/03/03 职场文书
签证扫盲贴,41个常见签证知识,需要的拿走
2019/08/09 职场文书
python爬取新闻门户网站的示例
2021/04/25 Python
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle