从形状为空的 Powerpoint 幻灯片中删除文本形状

Remove Text Shapes from Powerpoint slides where the shapes are empty

我的 md2pptx 代码使用 python-pptx 创建幻灯片。它有时会忽略不需要的页面上的形状。

在 Powerpoint 幻灯片放映中不会出现这些空白形状。在 LibreOffice 中他们似乎是。

我非常擅长操纵幻灯片的底层 XML。

删除空形状是否可行 - 也许通过删除它们的 XML 元素?或者 python-pptx 本身是否提供删除形状的功能? (我认为不是。)

假设我可以导航到形状并找出哪些是空的。

注意:我的目的不是删除整张幻灯片,只是删除空形状。

删除“独立”形状可靠且非常简单,例如:

sp = shape._element
sp.getparent().remove(sp)

问题出在形状与其他“包装部件”有关系的地方。例如,Picture 形状与包(.pptx zip 存档)中的图像部分(文件)有关系(用 rId 标识)。在这些情况下,如果您没有正确处理关系,则当您尝试在 PowerPoint 中打开生成的文件时,可能会出现“修复错误”。

矩形、文本框、线条或其他几何形状等“常规”形状(所谓的“自动形状”)没有任何关系,可以使用此方法可靠地删除。 table 可能也是安全的,但不是图表。小组形状可能也可以,但前提是它不包含图片或图表。如果您不同时删除它们的关系,那么图片和图表可能都有问题。

是否触发修复错误是 PowerPoint 和 LibreOffice(或其他 PPTX 客户端)之间可能不同的行为。您可以尝试只删除图片或图表形状而不处理关系,看看会发生什么,但为了可靠,您需要对所有可能的客户端进行测试。

删除关系有点复杂,要么在此处的另一个 python-pptx 问题中介绍,要么提出一个很好的新问题。