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


關於PPT轉圖片的問題需要注意的問題
 
我們有一個項目做過直接上傳ppt的功能,但是網頁不可能顯示ppt,所以只能把ppt轉成pdf或者圖片來顯示,我們的做法是轉成了圖片,然后使用swiper做成類似輪播圖的形式,這樣看起來也是一頁一頁的,跟ppt一樣。
 
ppt轉圖片過程:ppt->pdf->images,即先使用libreoffice把ppt先成pdf文件,再使用ImageMagick把pdf轉成圖片。
 
1、安裝LibreOffice
作用:把.ppt或.pptx文件轉換成pdf文件
 
2、安裝ImageMagick
作用:把pdf文件轉成圖片
 
3、安裝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轉成圖片的。
 
4、mac版的LibreOffice,直接使用官網下載的dmg文件安裝
然后在“應用程序”里找到“LibreOffice.app”,右鍵——查看包內容——找到MacOS目錄——找到soffice,該文件正是用來把ppt轉成pdf的程序(CentOS應該可能直接使用yum安裝,當然你願意用源碼安裝也可以)。

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

php調用具體轉換命令為:

 
<?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>&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就開始了,當轉換結束后,圖標自動會消失。
 
5、Imagick把pdf轉成圖片可能報以下錯誤(我在macos中遇到):
Exception 'ImagickException' with message 'FailedToExecuteCommand 'gs'

解決方法:

 

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.

To solve I added

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

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

 
6、對於CentOS,命令前一定要加上sudo,否則肯定會出現權限問題
且需要配置sudo權限,配置方法如下:
 

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

 

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

User  ×××××

Group ××××

 

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

 

以上是我遇到的坑,看到這篇文章的童鞋,希望你們能跳過這些坑。






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM