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



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

在Powerpoint幻灯片显示中不显示这些空形状。在LibreOffice中,它们似乎可以。

我很擅长为幻灯片操作底层XML。

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

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

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

删除"独立"Shape是可靠且非常简单的,例如:

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

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

"regular"形状(所谓的"自动形状"),如矩形、文本框、线条或其他几何形状没有关系,可以使用此方法可靠地删除。表格可能也很安全,但图表就不安全了。群组形状也可以,但前提是它不包含图片或图表。如果你不同时删除图片和图表之间的关系,它们都可能成为问题。

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

删除关系有点复杂,要么在SO的另一个python-pptx问题中涉及,要么会成为一个很好的新问题。

最新更新