• 重要:关于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 FilesLibreOffice 5programsoffice.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

     

    以上是我遇到的坑,看到这篇文章的童鞋,希望你们能跳过这些坑。





  • 相关阅读:
    Redis简介(数据结构,哨兵、集群和SpringDataRedis)
    FastDFS + Nginx
    Dubbo
    Ubuntu下Zookeeper的安装和基本使用
    RMI简介
    RPC
    各大技术团队的博客
    天了噜,为什么外链css要放在头部,js要放在尾部?
    月经帖 | 2019.11
    前端面试知识点
  • 原文地址:https://www.cnblogs.com/xiedie/p/7978724.html
Copyright © 2020-2023  润新知