重要:關於PPT轉圖片須要注意的問題

關於PPT轉圖片的問題須要注意的問題
 
咱們有一個項目作過直接上傳ppt的功能,可是網頁不可能顯示ppt,因此只能把ppt轉成pdf或者圖片來顯示,咱們的作法是轉成了圖片,而後使用swiper作成相似輪播圖的形式,這樣看起來也是一頁一頁的,跟ppt同樣。
 
ppt轉圖片過程:ppt->pdf->images,即先使用libreoffice把ppt先成pdf文件,再使用ImageMagick把pdf轉成圖片。
 
一、安裝LibreOffice
做用:把.ppt或.pptx文件轉換成pdf文件
 
二、安裝ImageMagick
做用:把pdf文件轉成圖片
 
三、安裝gs(全名ghost script)
但安裝時,直接用gs就能夠,好比macos用brew安裝,用:brew install gs 便可(注意安裝好後,/usr/local/Cellar中的名稱不是gs而是ghostscript),centos用yum -y install gs應該沒問題(猜想,未驗證)
做用: Ghostscript是一套建基於Adobe、PostScript及可移植文檔格式(PDF)的頁面描述語言等而編譯成的免費軟件。ImageMagick正是調用gs把pdf轉成圖片的。
 
四、mac版的LibreOffice,直接使用官網下載的dmg文件安裝
而後在「應用程序」裏找到「LibreOffice.app」,右鍵——查看包內容——找到MacOS目錄——找到soffice,該文件正是用來把ppt轉成pdf的程序(CentOS應該可能直接使用yum安裝,固然你願意用源碼安裝也能夠)。

它的路徑是:/Applications/LibreOffice.app/Contents/MacOS/sofficephp

php調用具體轉換命令爲:node

 
<?php
    switch(strtolower(PHP_OS)){
        case 'darwin':
            $libreoffice = '/Applications/LibreOffice.app/Contents/MacOS/soffice';
            break;
        case 'linux':
            $libreoffice = 'sudo /usr/bin/libreoffice';
            break;
        case 'windows':
            $libreoffice = 'C:\Program Files\LibreOffice 5\program\soffice.exe';
            break;
        default:
            $libreoffice = 'sudo /usr/bin/libreoffice';
    }

    $inputDir = WEB_ROOT . '/web' . $pdfupload_dir;
    $outputFile = WEB_ROOT . '/web' . $node_ppt_file['uri'] . $node_ppt_file['filename'];
    $cmd = "{$libreoffice} --headless --convert-to pdf --outdir {$inputDir} {$outputFile} 2>&1";

    exec($cmd);
    //exec命令的第2、三個參數能夠輸出具體報錯信息(固然這個報錯是結合命令末尾的:2>&1)
    //$res = exec($cmd,$output,$return_var);
    //print_r($output);
    //print_r($return_var);
    //exit;
 
當LibreOffice的soffice程序被調用後(使用如下格式命令調用):
 /Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to pdf --outdir /Users/Bruce/www/tp_center/frontend/web/uploads/casepdf/20171204/ /Users/Bruce/www/tp_center/frontend/web/uploads/caseppt/20171204/50112bdd50d6a36e87b5b91a9ffe6821.pptx  2>&1
 
對於macos,在dock欄裏會出現 LibreOffice的圖標,ppt轉pdf就開始了,當轉換結束後,圖標自動會消失。
 
五、Imagick把pdf轉成圖片可能報如下錯誤(我在macos中遇到):
Exception 'ImagickException' with message 'FailedToExecuteCommand 'gs'

解決方法:linux

 

I had the same problem on MacOS High Sierra, PHP 7.0 installed from Homebrew. The problem is that FPM $PATH contains (as echoed by <php echo getenv('PATH'); ?>) /usr/bin:/bin:/usr/sbin:/sbin, which doesn't include Brew's /usr/local/bin/ install path.web

To solve I addedmacos

env[PATH] = /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbinapache

to /usr/local/etc/php/7.0/php-fpm.d/www.conf, restarted php70 and worked!windows

 
六、對於CentOS,命令前必定要加上sudo,不然確定會出現權限問題
且須要配置sudo權限,配置方法以下:
 

PHP腳本調用exec執行權限設置

 

1.PHP 調用exec執行linux 系統命令時,是以apache 默認user執行,user設置在 httpd.conf文件centos

User  ×××××php7

Group ××××app

 

2.若是直接調用exec ('****') 執行root級命令,會報權限不足,這時須要用 sudo exec ('')

3.sudo 執行過程須要輸入用戶密碼,勢必對PHP執行帶來極大不便,如何取消密碼、屏蔽過程信息等,能夠在 sudo 配置文件/etc/sudoers裏設置

 

添加sudo用戶

       ## Allow root to run any commands anywhere
       root    ALL=(ALL)       ALL
       apache    ALL=(ALL)        NOPASSWD: ALL

註釋掉  Defaults    requiretty  (屏蔽中途信息)

添加PATH:        Defaults    secure_path = /sbin:/bin:/usr/sbin
 

4.一些可執行腳本須要調用lib,默認不會繼承root的LD_LIBRARY_PATH ,報錯以下:

error while loading shared libraries: libavformat.so.56: cannot open shared object file: No such file or directory

解決辦法:編輯 /etc/lib.so.conf

添加相應lib路徑:/usr/ffmpeg/lib/
                 執行sudo  ldconfi

 

以上是我遇到的坑,看到這篇文章的童鞋,但願大家能跳過這些坑。



相關文章
相關標籤/搜索