首页 > 解决方案 > 在php中从xml创建pptx文件

问题描述

我正在尝试从 XML 文件在我的服务器上创建一个 pptx 文件。XML文件是有效的,可以通过以下方式打开并保存为pptx

  1. 右键点击
  2. 打开用
  3. 微软办公室简报

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

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

目前,我正在通过 com_dotnetCOM对象执行此操作

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

我必须在 Windows Server 的组件服务中将“Microsoft Powerpoint Slide”的标识设置为特定的用户名/密码,但有时这段代码只是决定它不会运行。

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

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

至极显然链接到 Windows Server 的组件服务中的“Microsoft Powerpoint Slide”的标识,或者在打开 Powerpoint 组件服务器端时出现一些意外行为(例如需要手动输入的弹出窗口)(至少这是我发现的远的)

我正在寻找一个解决方案,它可以完成这段代码应该已经完成​​的工作,但是以一种无忧的方式。

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

我很乐意为您提供任何帮助。提前致谢。

标签: phpxmlpowerpoint

解决方案


推荐阅读