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 协议》,转载必须注明作者和本文链接
推荐文章: