Windows 系統,PHP實現PPT轉PDF,PDF轉圖片的操作

赤三禾發表於2021-08-11

一、背景

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

相關文章