PHP替换Word中变量并导出PDF图片的实现方法

 更新时间:2020年11月26日 11:55:47   作者:古月先生  
这篇文章主要给大家介绍了关于PHP替换Word中变量并导出PDF图片的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在线生成合同信息,一个 word 文件里面有些信息需要通过数据库读取计算出并填写到 word 文档中最终显示在线 pdf 预览功能,接下来我交大家如果实现该需求

2、接下来实现如何替换文档内容

我们新建一个 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面向对象之里氏替换原则简单示例

    这篇文章主要介绍了PHP面向对象之里氏替换原则,结合实例形式分析了php里氏替换原则的概念、原理、简单使用方法及相关注意事项,需要的朋友可以参考下
    2018-04-04
  • php curl 上传文件代码实例

    php curl 上传文件代码实例

    这篇文章主要介绍了php curl 上传文件代码实例,本文给出了两种实现方法,并分别给出了实现代码,需要的朋友可以参考下
    2015-04-04
  • PHP实现的栈数据结构示例【入栈、出栈、遍历栈】

    PHP实现的栈数据结构示例【入栈、出栈、遍历栈】

    这篇文章主要介绍了PHP实现的栈数据结构,结合实例形式分析了php定义栈及入栈、出栈、遍历栈等相关操作技巧,需要的朋友可以参考下
    2017-12-12
  • PHP中ini_set与ini_get用法实例

    PHP中ini_set与ini_get用法实例

    这篇文章主要介绍了PHP中ini_set与ini_get用法,以实例形式讲述了ini_set与ini_get函数的具体功能与适用情况,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • 在Windows XP下安装Apache+MySQL+PHP环境

    在Windows XP下安装Apache+MySQL+PHP环境

    这篇文章主要介绍了在Windows XP下安装Apache+MySQL+PHP环境的要点分析,需要的朋友可以参考下
    2015-02-02
  • PHP中使用php5-ffmpeg撷取视频图片实例

    PHP中使用php5-ffmpeg撷取视频图片实例

    这篇文章主要介绍了PHP中使用php5-ffmpeg撷取视频图片实例,本文使用一个AVI格式视频为例,讲解了如何撷取视频画面为图片,需要的朋友可以参考下
    2015-01-01
  • php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别

    php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别

    if(isset($_POST['submit'])) 它的意思是不是判断是否配置了$_POST['submit'] 这个变量呢? 如果有这个变量 在执行其它代码
    2011-02-02
  • php中简单的对称加密算法实现

    php中简单的对称加密算法实现

    最近突发奇想要往数据库里保存一些机密的东西,然后就想着怎么让别人即使进入到了数据库也看不懂存储的是什么,那么只有加密了;可是我们自己还要看呢,那只能找一些对称加密的算法了,我们想看的时候再解密回来。下面就介绍了php中简单的对称加密算法实现。
    2017-01-01
  • php实现连接access数据库并转txt写入的方法

    php实现连接access数据库并转txt写入的方法

    这篇文章主要介绍了php实现连接access数据库并转txt写入的方法,涉及php连接、读取access数据库及写入txt文件的相关操作技巧,需要的朋友可以参考下
    2017-02-02
  • PHP框架性能测试报告

    PHP框架性能测试报告

    本文给大家分享的是常见的几款php框架在不同情况下的性能测试报告,给大家在选择框架的时候提供些帮助。
    2016-05-05

最新评论