01
Jan

WINDOWS服务器下PHP利用COM组件将PPT生成图片

本文仅适用于WINDOWS服务器,且必须有安装Microsoft PowerPoint;

首先配置php.ini,启用组件:

extension = php_com_dotnet.dll
com.allow_dcom = true

运行comexp.msc -32

打开组件服务,注意这里使用comexp.msc -32是因为我们将要配置的组件是32位的,运行dcomcnfg.exe无法看到组件。

一般在【组件服务】-【计算机】-【我的电脑】-【DCOM配置】-【Microsoft PowerPoint 幻灯片】上点右键,属性窗口中切换到【标识】选项卡,设置“交互式用户”即可,一般本地设置这个程序就可以跑起来了。

PHP源代码:

/**
 * 将指定PPT生成图片
 * @param  string  $pptfile PPT路径
 * @param  boolean $iswater 是否增加水印
 */
function ppt2img($pptfile, $iswater = true){
    if(!$pptfile){
        return false;
    }
    //去除第一个'/'
    $pptfile = substr($pptfile, 1);
    //获得存储路径
    $ext_arr = explode(".", $pptfile);
    $ext_arr[0];
    //没有则创建
    if(!file_exists($ext_arr[0])){
        @mkdir($ext_arr[0],0777,true);
    }
    set_time_limit(300);
    $exportFolder = realpath($ext_arr[0]);
    $powerpnt = new \COM("powerpoint.application") or die("Unable to instantiate Powerpoint");
    $presentation = $powerpnt->Presentations->Open(realpath($pptfile), false, false, false) or die("Unable to open presentation");
    $i = 1;
    foreach($presentation->Slides as $slide){
        $slideName = $slide->SlideNumber;
        $slide->Export($exportFolder."//".$slideName.".jpg", "jpg");
        //水印
        if($iswater){
            water($ext_arr[0].'/'.$i.'.jpg');
        }
        $i += 1;
    }
    $presentation->Close();
    $powerpnt->Quit();
    $powerpnt = null;
    return $i;
}


提示:

如果组件服务中【我的电脑】如果出现红色向下箭头原因:msdtc 没有安装或者被卸载了!

解决方法:

msdtc -resetlog

msdtc -uninstall

重启电脑再执行:

msdtc -install



上到服务器上会提示 ERR: Failed to create COM object `powerpoint.application': 拒绝访问。


最头痛的就是这个安全权限了,网上的有关填哪个权限简直是五花八门什么都有,我的解决方式是添加3个账号:Everyone、NETWORK、SERVICE + 站点相关账号,如图:


总体来看,采用COM组件的方式代码简单,因为是调用Microsoft PowerPoint直接转换,生成图片质量较好(不丢失元素),缺点是你得忍受WINDOWS服务器~


About Me

Nothing is impossible!

Friends
倩倩的网站儿子的网站秦兽兽丽丽
CATEGORIES
Tags
行政区域名列表域名体系nginxopen_basedir思维指令编程语言程序URL网站上线域名FTP云服务器搜索引擎JSCSS网页超链接聚合内容列表元素网页构成网站的构成网站的分类网站单标签HTML第一个网页简单网页博域科技2018香山春游AJAX字体PHP升级
Copyright©2018 王阳 版权所有