百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

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

yuyutoo 2024-11-11 16:47 21 浏览 0 评论

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

POWER POINT

首先配置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服务器~

相关推荐

URL URI傻傻分不清楚,dart告诉你该怎么用

简介如果我们要访问一个网站,需要知道这个网站的地址,网站的地址一般被称为URL,他的全称是UniformResourceLocator。那么什么是URI呢?...

你最深爱的编程语言其实很烂

我最近写了几篇比较严肃的博客,是关于一些沮丧的事情,结果我开始有些忧郁。很严重。所以,我想应该说些比较轻松的事情。我要做的就是数落大家最喜欢的编程语言。你会问我为什么,为什么要搞这种恶作剧?亲爱的朋友...

路由器交换机基础配置6——命令行显示信息设置

一、控制命令行显示信息设备中的部分命令执行后会出现提示、警告、执行结果等显示信息,用户可以控制这些显示信息的显示方式,以方便阅读。1、提示和警告信息提供中、英文两种语言显示。可以通过language-...

python是一种什么类型的编程语言

Python(英国发音:/'paθn/美国发音:/'paθɑn/)是一种广泛使用的解释型、高级编程、通用型编程语言,由吉多·范罗苏姆创造,第一版发布于1991年。可以视之为一种改良(加入一些其他编程...

60年了,LISP语言的进化史是否会引发你对AI未来的新思考?

图:pixabay作为长期垄断AI领域的高级计算机语言程序,Lisp语言到底经过了怎样的变迁?也许,我们可能已经忘记了一些在今天仍然有用的东西,或者说,至少了解这些历史对一些新的想法产生有所影响。o2...

Java 和 JavaScript 的关系

Java和JavaScript不同之处:●出身不同:Javascript与Java是由不同的公司开发的不同产品。Javascript是Netscape公司的脚本语言,而Java...

Micro:命令行文本编辑器 (Go)

Micro是一款基于终端的文本编辑器,使用Go开发。Micro是个命令行编辑器,主要特性是易用,直观,并且包含所有现代化终端的优点。功能:易用常用快捷键绑定(ctrl-s,ctrl-c,...

7 行代码 3 分钟:从零开始实现一门编程语言

本文最初发布于MattMight的个人博客。...

码上去学海南公司:C语言到底能干什么?我列举了8种经典案例

虽然C语言执行速度极快,占用资源极少,但是它使用起来非常麻烦,完全没有Java、Python、Go、JavaScript、C#等方便和灵活,会严重拖慢项目的开发进度,所以,通常只有在“不得不”的情...

什么是 JavaScript?

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注!作者|慕课网精英讲师然冬...

新人如何自学安卓手机软件开发?

当我们问一个人,你是做什么的,听到我是做软件开发的,不由自主就会感觉,这个人好厉害。越来越多的人投身于软件开发行业,可能有些人本身不是学这个专业的,出于对这个行业的热爱,自学软件开发。现在这个社会,多...

Android开发基础入门(一):UI与基础控件

Android基础入门前言:...

第02章 《小Z安卓程序员之路》Android Studio

不积跬步无以至千里,不积小流无以成江海!!每天进步一点点我是杨哲丶,一个梦想把科技和艺术结合在一起的程序猿!!小Z在开始查询的如何使用SVN和如何使用Git版本控制工具的时候,发现网上大部分居然是关于...

支付宝团队 | 移动客户端实战教程(iOS和Android)

今天给大家推荐一个非常好的PPT,是github在线的,是支付宝团队内部分享技术用的PPT,适合Web端和移动端的同学入门客户端开发,是我见过的最详细的《iOS&Android开发从入门到...

只需二步,就可以在win11操作系统上运行Android程序,非常简单

你想像过吗,只需几个简单的步骤即可在你的Windows电脑上运行Android应用程序。现在,在Windows11中运行安卓应用程序现在就像在手机上运行应用程序一样简单。微软和亚马逊联手打造了数千款...

取消回复欢迎 发表评论: