php - 在php中从xml创建pptx文件
问题描述
我正在尝试从 XML 文件在我的服务器上创建一个 pptx 文件。XML文件是有效的,可以通过以下方式打开并保存为pptx
- 右键点击
- 打开用
- 微软办公室简报
然后可以将其保存为 .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
- 如果没有在组件服务中设置特定权限,服务器不允许我访问组件“Microsoft Porwerpoint Slide”
- 在打开组件服务器端时,服务器无法处理“弹出”的提示或其他意外行为。在某些情况下,这需要真正的鼠标单击来关闭提示或警告,才能真正让您的程序“运行”。
- 更多在上面的链接
我必须在 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 文件中时才有效。
我很乐意为您提供任何帮助。提前致谢。
解决方案
推荐阅读
- dictionary - Flutter - 从rest api循环遍历纬度和经度列表以获取两个坐标之间的距离
- clickhouse - Clickhouse - TTL 与 ALTER DELETE
- python - Python 测试在 ubuntu 上本地运行,但在通过 Jenkins 运行时失败,出现错误“导入测试模块'/var/lib/jenkins/workspace”时出现错误“ImportError”
- c# - 如何将 C++ 结构数组编组为 C#
- postgresql - 多区域复制 - Cloud SQL
- c - 读取整数后不能使用gets()读取字符串
- c - 如果 ((decnumber - 28) > 0) 正确?我对二进制制造商的 dec 正在返回 ALL 00000000
- sas - SAS:根据值乘以行
- html - 我需要在文本旁边显示图像
- android - android.view.InflateException:二进制 XML 文件行 #29:二进制 XML 文件行