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服务器~
上一篇:代码不朽 - 十大可维护性原则
下一篇:Docker概念及常用命令