新COM(“PowerPoint.Application”)不起作用

时间:2012-06-15 14:50:19

标签: php png powerpoint

我正在尝试将ppt文件上的幻灯片转换为PNG文件,但我的代码有问题。

在本地测试中,脚本停留在此行:

$ppApp = new COM("PowerPoint.Application") or die ("Unable to instantiate PowerPoint");

然后显示"Maximum execution time of 30 seconds exceeded";

当我进入我的实时服务器时,该脚本第一次工作,但随后显示错误

  

“致命错误:未捕获异常'异常',消息'无法关闭ppt文件1251.pptx。'

我在Windows服务器上,我觉得我使用ppt进程的方式有问题。

以下是代码:

$ppApp = new COM("PowerPoint.Application") or die ("Unable to instantiate PowerPoint");
    $ppApp->Visible = True;
    $strPath = realpath(basename(getenv($_SERVER["SCRIPT_NAME"])));
    $ppName = $jobQuery['id'].".pptx";
    $FileName = "MyPP";

    //*** Open Document ***//
    $ppApp->Presentations->Open(realpath($ppName));

    //*** Save Document ***//
    $p_opned =  $ppApp->ActivePresentation->SaveAs($strPath."/".$jobQuery['id']."_".$FileName,18);
    //$ppApp->ActivePresentation->SaveAs(realpath($FileName),17);
    $ppApp->Quit();
    $ppApp = NULL;
    unset($ppApp); 

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我认为您的问题可能出在您的保存位置,或者只是找不到您的文件,您确定您尝试保存的位置实际存在,因为您的代码我不太确定吗?

$strPath = realpath(basename(getenv($_SERVER["SCRIPT_NAME"])));

应该是:

$strPath = realpath(dirname(__FILE__));

您确定该文件确实存在于以下位置:

$ppName = $jobQuery['id'].".pptx";

检查:

file_exists($ppName)

在这里查看类似的问题:Fatal Error in convert PPT to PNG in PHP

修改

尝试以下操作,我认为你的$ p_opned保持引用对你的$ ppApp对象开放,因此你的实例没有被正确删除。

//*** Save Document ***//
$ppApp->ActivePresentation->SaveAs($strPath."/".$jobQuery['id']."_".$FileName,18);

编辑2:

根据要求尝试包装您认为导致异常的行(所以假设它是这一行):

try {
  //*** Save Document ***//
  $ppApp->ActivePresentation->SaveAs($strPath."/".$jobQuery['id']."_".$FileName,18);
} catch (Exception $e) {
    echo 'Exception message: ',  $e->getMessage(), "\n";
}

虽然再次查看您的错误消息,但它指的是您尝试打开的原始文件(1251.pptx),因为您尝试使用不同的修补程序保存文件(在代码中未提及)

如果以上操作不起作用,您可以尝试在“打开”脚本行周围包装Exception try / catch,或者也可以在退出之前尝试添加:

$ppApp->ActivePresentation->Close();

如果您的错误是因为Powerpoint在第一次调用实例后仍然处于闲置状态,那么它必定是因为您仍然在某处存在引用,所以请尝试检查所有代码。如果仍然出现错误,您应该在问题中包含FULL错误消息并从您的问题中删除Max执行错误消息这实际上不是问题(我假设您仍然没有得到“超过30秒的最大执行时间“消息了?”。

最后,您可以随时尝试使用PowerPoint库:

http://phppowerpoint.codeplex.com/