【问题标题】:Remove Text Shapes from Powerpoint slides where the shapes are empty从形状为空的 Powerpoint 幻灯片中删除文本形状
【发布时间】:2021-05-16 06:28:29
【问题描述】:
我的 md2pptx 代码使用 python-pptx 创建幻灯片。它有时会忽略页面上不需要的形状。
在 Powerpoint 幻灯片放映中,这些空形状不会出现。在 LibreOffice 中,它们似乎是。
我非常擅长为幻灯片操作底层 XML。
删除空形状是否可行——也许是通过删除它们的 XML 元素?或者 python-pptx 本身是否提供删除形状的功能? (我认为不是。)
假设我可以导航到形状并找出哪些是空的。
注意:我的目标不是删除整个幻灯片,只是删除空形状。
【问题讨论】:
标签:
python
powerpoint
openxml
python-pptx
【解决方案1】:
删除“独立”形状是可靠且非常简单的,例如:
sp = shape._element
sp.getparent().remove(sp)
问题在于形状与其他一些“包装部件”有关系。例如,Picture 形状与包(.pptx zip 存档)中的图像部分(文件)有关系(用rId 标识)。在这些情况下,如果您没有正确处理这种关系,当您尝试在 PowerPoint 中打开生成的文件时,您可能会收到“修复错误”。
诸如矩形、文本框、线条或其他几何形状之类的“常规”形状(所谓的“自动形状”)没有任何关系,并且可以使用此方法可靠地删除。表格也可能是安全的,但不是图表。组形状可能也可以,但前提是它不包含图片或图表。如果您不删除它们的关系,图片和图表都可能会出现问题。
是否触发修复错误是 PowerPoint 和 LibreOffice(或其他 PPTX 客户端)之间可能不同的行为。您可以尝试只删除图片或图表形状而不处理关系,看看会发生什么,但要可靠,您需要与所有可能的客户一起测试它。
删除关系涉及更多一点,或者在 SO 上的另一个 python-pptx 问题中涉及,或者会提出一个很好的新问题。