Windows 系统,PHP实现PPT转PDF,PDF转图片的操作

一、背景

用户后台上传PPT,自动转成图片

二、环境说明

  • 本机操作系统:Win10
  • 本机开发环境:Phpstudy
  • PHP版本:5.6.9
  • 办公套件:LibreOffice:7.0.6.2
  • 服务器操作系统:Windows server 2012
  • 框架:laravel5.5,补充:安装过ncjoes/offce-conveter扩展(文件转换格式),该扩展适用于linux系统,不适用于Windows系统

三、方案(基于Windows系统)

1. PHP调用COM组件,只需一步实现PPT转成图片,经过本机win10测试,转换效果特别好,但是。。。。。部署到服务器后,加了几个小时班,同样的配方,同样的code,未成功(由于项目紧急,暂时以失败告终,准备换思路,换方案)

可参考的网址:

2.使用LibreOffice办公套件
  • 先实现PPT转PDF
  • 在将PDF转图片

四、 基于第二种方案,实现步骤

1. 下载LibreOffice办公套件,安装

下载地址:https://zh-cn.libreoffice.org/download/libreoffice/

2.配置环境变量

软件安装目录/program,加入到环境变量中,配置后,在cmd命令行执行:

soffice --version

看到版本号,说明安装成功

3. php.ini配置,修改后重启apache或其他web服务器

  • 关闭安全模式:safe_mede = Off
  • 启用函数exec:disable_functions中去掉exec函数

4. CMD命令行执行转换命令

  • 转换PDF的命令格式:
    soffice --headless --convert-to pdf:writer_pdf_Export {文档路径} --outdir {导出目录路径}
  • 执行命令示例
soffice --headless --invisible --convert-to pdf:writer_pdf_Export "E:\www\project\php\public\uploadfile/poster/ppt/202108100348548355.pptx" --outdir "E:\www\projejct\php\public\uploadfile/poster/pdf"

第一个双引号字符串:PPT的完整地址
第二个双引号字符串:转换后PDF的路径
注:转换后的PDF文件名和转换前的PPT文件名一致

5. 使用PHP代码执行转换命令

5.1 PPT转PDF

//构建转换命令
$sCmd = 'soffice --headless --invisible --convert-to pdf:writer_pdf_Export "E:\www\project\php\public\uploadfile/poster/ppt/202108100348548355.pptx" --outdir "E:\www\projejct\php\public\uploadfile/poster/pdf"'; 
//exec执行命令,
exec($sCmd, $out, $return);
//成功后return = 0
echo $return;

5.2 PDF转图片

//构建转换命令 
$sCmd = 'soffice --headless --invisible  --convert-to  jpg "E:\www\project\php\public\uploadfile/poster/pdf/202108100348548355.pdf" --outdir  "E:\www\project\php\public\uploadfile/poster/img"';
//exec执行命令
exec($sCmd,$out, $return);
//成功后return 返回0
echo $return;

6. 如果遇到cmd命令行可以执行成功,PHP代码执行失败,请继续往下看

6.1 cmd命令行,添加当前windows系统账户权限

6.2 LibreOffice/program目录下的进程文件加上权限

  • soffice.bin 和 soffice.com、soffice.exe,和6.1 cmd同样的配方

总结

通过以上步骤,完成cmd命令行和PHP代码对于PPT转PDF、PDF转图片的操作

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5
yangweijie

用过php word组件 转pdf 或者执行word里的宏

2年前 评论

或许你可以试试这个

file

2年前 评论

@NI9NE @yangweijie 感谢两位建议,有时间我在研究研究。

2年前 评论

文章不错,但是少了一个关键的步骤,设置了环境变量后虽然cmd能马上读到,但php里是无法读到刚加的环境变量的,即使是重启web环境也无用,必须重启电脑。我在这一步卡了一个小时 因为cmd能运行新加的环境变量了 以为只要重启apache和php就可以了。最终还是靠重启电脑解决这个问题的。还有一个是pdf转图片只能转第一页有解决方案吗 因为我pdf是有很多页的 网上没有找到解决方案。

2年前 评论

你好问下,你们用LibreOffice转文件耗时多久?我2核(vCPU) 4 GiB的服务器需要4-5秒

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!