关于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

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

 
 
 
 

重要:关于PPT转图片需要注意的问题的更多相关文章

  1. C#实现 word、pdf、ppt 转为图片

    office word文档.pdf文档.powerpoint幻灯片是非常常用的文档类型,在现实中经常有需求需要将它们转换成图片 -- 即将word.pdf.ppt文档的每一页转换成一张对应的图片,就像 ...

  2. word、pdf、ppt 转为图片

    office word文档.pdf文档.powerpoint幻灯片是非常常用的文档类型,在现实中经常有需求需要将它们转换成图片 -- 即将word.pdf.ppt文档的每一页转换成一张对应的图片,就像 ...

  3. php实现ppt转图片,php调用com组件问题

    PHP 调用com组件将ppt转为图片. 需要在php.ini中开启 extension=php_com_dotnet.dllcom.allow_dcom = true   测试代码如下:   < ...

  4. 实现PPT在线预览,PPT转图片方案

    一.PPT转图片可行方案探索历程 PPT转图片方案 方案具体步骤及分析 已放弃方案 poi(失真度太高):Aspose直接转图片(收费,效果较好,备选):微软Office Online(需要基于Win ...

  5. Java 转PPT为图片、PDF、SVG、XPS、ODP以及PPT和PPTX互转

    同一文档,在不同的文档查看器或者编译环境中,需要对该文档进行相应的格式转换.下面的内容中,将介绍通过Java编程来实现PPT文档格式转换的方法. 使用工具: Spire.Presentation fo ...

  6. WPF解析PPT为图片

    偶遇需要解析 PPT为单张图片 其中,对于包含动画的PPT页,分别对动画最后效果进行截取,即每个连续动画截取 (动画N个)N+1(原图)张 http://git.oschina.net/jiailiu ...

  7. linux下用php将doc、ppt转图片

    解决方案分成两步: (1)调用unoconv命令将 doc.ppt 转 pdf (2)使用 imagemagick将 pdf 转图片 步骤 1.安装unoconv sudo apt-get insta ...

  8. aspose ppt转图片

    如果直接转图片,会很模糊采用先将ppt转pdf,在通过pdf转图片,这样出来的结果就非常清晰 var pptFileName = "公司网络及计算机使用与要求.pptx"; Pre ...

  9. 用VBS将PPT转为图片

    '使用方法:把ppt文件拖放到该文件上. '机器上要安装Powerpoint程序 On Error Resume Next Set ArgObj = WScript.Arguments pptfile ...

随机推荐

  1. 接口测试思路,jmeter,接口测试流程

    接口测试总结 一:接口测试思想 接口测试:通过向服务器端发送请求,获取响应与预期结果做对比的一种服务端黑盒测试过程. 解释:接口就是将浏览器,客户端,手机端,或者服务器调用另一个服务器的请求抽离出来测 ...

  2. Python 的装饰器

    Python 在语言级别提供了装饰器模式的实现,代码中Python内置的 functools.wraps 会完成包括函数名属性处理替换 #!/usr/bin/env python3 #--coding ...

  3. Windows下Mysql5.7开启binlog步骤及注意事项

    1.查看是否开启了binlog:show binary logs; 默认情况下是不开启的. 2.开启binlog:修改mysql的配置文件my.ini.添加如下配置: 该文件默认不允许修改,需要右键“ ...

  4. MySQL事务与锁

    MySQL事务与锁 锁的基本概念 锁是计算机协调多个进程或线程并发访问某一资源的机制. 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISA ...

  5. JAVA基础知识总结:二

    一.数据类型 1.常量 在程序运行的过程中,值不会发生改变的标识符 常量的分类:整数常量.小数常量.布尔值常量.字符常量.字符串常量.null常量 2.变量 表示的值可以发生改变 定义一个变量,需要在 ...

  6. bootstrap 鼠标悬停显示

    1. <button type="button" rel="drevil" data-content="报名截止时间:'+time+'" ...

  7. 【深度学习系列】手写数字识别卷积神经--卷积神经网络CNN原理详解(一)

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

  8. Java 常用正则表达式,Java正则表达式,Java身份证校验,最新手机号码正则表达式

    Java 常用正则表达式,Java正则表达式,Java身份证校验,最新手机号码校验正则表达式 ============================== ©Copyright 蕃薯耀 2017年11 ...

  9. 对抗栈帧地址随机化/ASLR的两种思路和一些技巧

    栈帧地址随机化是地址空间布局随机化(Address space layout randomization,ASLR)的一种,它实现了栈帧起始地址一定程度上的随机化,令攻击者难以猜测需要攻击位置的地址. ...

  10. 1.Introduction 介绍

    Welcome to Log4j 2! Introduction Almost every large application includes its own logging or tracing ...