我正在尝试从XML文件在服务器上创建pptx文件。 XML文件有效,可以通过
打开并保存为pptx。然后可以将其另存为.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
我必须将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文件中。
我将非常感谢您的帮助。预先感谢。