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 协议》,转载必须注明作者和本文链接
用过php word组件 转pdf 或者执行word里的宏
或许你可以试试这个
@NI9NE @yangweijie 感谢两位建议,有时间我在研究研究。
文章不错,但是少了一个关键的步骤,设置了环境变量后虽然cmd能马上读到,但php里是无法读到刚加的环境变量的,即使是重启web环境也无用,必须重启电脑。我在这一步卡了一个小时 因为cmd能运行新加的环境变量了 以为只要重启apache和php就可以了。最终还是靠重启电脑解决这个问题的。还有一个是pdf转图片只能转第一页有解决方案吗 因为我pdf是有很多页的 网上没有找到解决方案。
你好问下,你们用LibreOffice转文件耗时多久?我2核(vCPU) 4 GiB的服务器需要4-5秒