zoukankan      html  css  js  c++  java
  • Linux系统使用PHP实现PPT转图片

    目前主流的实现方式为先将PPT转为PDF,再将PDF转成图片。

    1、安装软件

    yum install nodejs npm unoconv libreoffice-dev imagemagick  

    2、安装字体

    创建字体目录

    mkdir -p /usr/share/fonts/win

    然后将windows下的字体文件上传到此目录,执行命令使之生效

    mkfontscale
    mkfontdir
    sudo fc-cache -fv

    3、安装nodejs扩展ppt2png

    mkdir /opt/ppt
    cd /opt/ppt
    npm init
    npm install ppt2png  

    编写脚本:

    vim test.js

    脚本代码:

    var ppt2png = require('ppt2png');  
    var ppt = process.argv[2];  
    var topath = process.argv[3];  
    ppt2png(ppt, topath, function( err ){  
        if(err) {  
            console.log(err);  
        } else {  
            console.log('convert successful.');  
        }  
    });  

    执行脚本:

    nodejs test.js 1.pptx ./test/hi

    脚本执行后,先将1.pptx转为1.pdf,然后将1.pdf自动转为图片,自动创建test目录,生成hi-0.jpg,hi-1.jpg。

    4、php调用脚本

    创建test.php

    <?php
    $output = shell_exec("whoami");
    echo "<pre>I am $output</pre>";
    ?>

    浏览器访问查看apache的用户名,我的是apache,然后赋予root权限。

    vim /etc/sudoers
    apache  ALL=(ALL) NOPASSWD:ALL

    然后在php页面中调用脚本,调用时加上sudo:

    <?php 
    //堵塞方式
    shell_exec('sudo node /opt/ppt/test.js /opt/ppt/3.ppt /opt/ppt/hello/hi');
    
    //非堵塞方式
    shell_exec("sudo node /opt/ppt/test.js /opt/ppt/3.ppt /opt/ppt/hello/hi  > /dev/null 2>&1 &");
    ?>

    如果php页面调用脚本时出现sudo: sorry, you must have a tty to run sudo

    修改一下sudo的配置就好了

    vim /etc/sudoers

    注释掉 Default requiretty 一行

    #Default requiretty

    意思就是sudo默认需要tty终端,注释掉就可以在后台执行了。

    5、ppt2png插件代码解析

    /opt/ppt/node_modules/ppt2png/ppt2png.js为核心功能。

    代码很简单,调用unoconv将ppt转为pdf,调用convert命令将pdf转为图片。

    其默认转出的图片为png,速度慢,可以修改代码:

    exec('convert -resize 1200 -density 200' + input + ' ' + output+'.png', 

    改为:

    exec('convert -resize 800 -density 72 ' + input + ' ' + output+'.jpg', 

    常见错误:

    1、执行时如提示convert命令未找到,则重新安装ImageMagick

    yum install ImageMagick
    # 测试是否安装完成--查看是否有结果输出
    convert -v

    2、Can't open display: Set DISPLAY environment variable, use -display option or check permissions of your X-Server

    yum install libreoffice-headless

    参考网址:

    https://oomake.com/question/3133511

    https://blog.csdn.net/liuxiao723846/article/details/97822207

    http://blog.51yip.com/jsjquery/1924.html

    https://www.liminghulian.com/article/202

    https://blog.csdn.net/wuzuyu365/article/details/95988470

    https://blog.csdn.net/pwtitle/article/details/51684685

    https://blog.csdn.net/weixin_40816738/article/details/102847228

  • 相关阅读:
    intel 蓝牙驱动安装时报错
    H310C,B365,M.2 NVME SSD,USB3.0,安装 WIN7 64 位
    C# .NET 判断输入的字符串是否只包含数字和英文字母
    squid http,https, 代理,默认端口3128
    C# .net mvc web api 返回 json 内容,过滤值为null的属性
    centos7安装python-3.5
    systemctl命令完全指南
    Centos7中systemctl命令详解
    Python if 和 for 的多种写法
    CentOS 7.0,启用iptables防火墙
  • 原文地址:https://www.cnblogs.com/codeit/p/15006326.html
Copyright © 2011-2022 走看看