通过php中的xml创建pptx文件

时间:2019-06-05 10:47:50

标签: php xml powerpoint

我正在尝试从XML文件在服务器上创建pptx文件。 XML文件有效,可以通过

打开并保存为pptx。
  1. 右键单击
  2. 打开方式
  3. Microsoft Office Powerpoint

然后可以将其另存为.pptx文件。

现在,我想以编程方式执行此操作,或者至少让我的代码输出有效的pptx文件,而不仅仅是一个xml文件,而我必须手动更改文件扩展名。

当前,我是通过com_dotnet COM对象

来完成此操作的

COM类允许您实例化与OLE兼容的COM对象,并调用其方法并访问其属性。 https://php.net/manual/en/class.com.php

注意:$content是有效的XML内容, $path是正确的文件路径,而$filename是正确的命名。 我检查了这些,它们都很好。

$document_xml = $path.$filename.".xml";
$document_pptx = $path.$filename.".pptx";

// writing content to xml file
$file = fopen($document_xml, "w");
fwrite($file, $content);
fclose($file);

// xml to pptx
$pptx = new COM("powerpoint.application") or die("Unable to instantiate Powerpoint");

$pptx->Visible = 1;
$pptx->Presentations->Open2007($document_xml, False, False, False) or die("Unable to open document");

$pptx->Presentations[1]->SaveAs($document_pptx);
// saved as pptx

$pptx->Presentations[1]->Close();
$pptx->Quit();
$pptx = null;

unlink($document_xml);

我的问题是,这段特殊的代码现在让我很头疼了很长时间,因为办公室的服务器端自动化存在一些缺点: https://support.microsoft.com/en-us/help/257757/considerations-for-server-side-automation-of-office

  • 在组件服务中未设置特定权限的情况下,服务器不允许我访问组件“ Microsoft Porwerpoint Slide”
  • 打开组件服务器端时,服务器无法处理“弹出”的提示或其他意外行为。在某些情况下,这需要真正的Mouseclick来关闭提示或警告,以真正使您的程序“运行”。
  • 更多有关以上链接

我必须将Windows Server的Components-Service中的“ Microsoft Powerpoint幻灯片”的标识设置为特定的用户名/密码,但是,有时此代码只是决定它不会运行。

然后,我必须重新启动服务器或在服务器上手动终止正在运行的Powerpoint进程。这就是我在这里要避免的事情。

在这种情况下,它给我的异常是: Failed to create COM object 'Powerpoint.Application': Aufruf wurde durch Aufgerufenen abgelehnt. wich转换为“被呼叫(对象)拒绝了呼叫”。

很显然,它链接到Windows Server组件服务中的“ Microsoft Powerpoint幻灯片”的标识,或者在打开Powerpoint组件服务器端时出现某些意外行为(例如,需要手动输入的弹出窗口)(至少就是我到目前为止已找到)

我正在寻找一种解决方案,该解决方案应执行此代码本应做的事情,但要避免麻烦。

仅将xml内容保存到.pptx文件中并不起作用,因为在此pptx幻灯片(从一个幻灯片链接到另一个幻灯片等)中有一些超链接和其他内容。这些仅在我执行上述方法或其他任何操作时才有效,这些方法实际上是使用Powerpoint打开我创建的XML文件,然后将其保存到.pptx文件中。

我将非常感谢您的帮助。预先感谢。

0 个答案:

没有答案