一、背景
使用者後臺上傳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 協議》,轉載必須註明作者和本文連結