在PowerPoint中创建“PicturePlaceholder”并使用PythonpTX访问它

2024-09-29 00:12:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在使用python-pptx制作PowerPoint模板。我已在MS Office上创建了一个模板,并希望使用文本和图像动态填充模板。因此,我创建了包含占位符的布局和幻灯片

我在访问和填充文本占位符方面没有问题,但是,我正在努力使用图片占位符

我想使用PicturePlaceholder object.insert_picture()方法。您还可以在文档here中找到此方法的示例

为此,我访问我的占位符如下:

prs = Presentation(pathToPptxTemplate)
slide = prs.slides[indexOfMySlide]

# There are multiple image placeholders on my slide
image_placeholders = [
            i for i in slide.placeholders if
            i.placeholder_format.type == 18
        ]

for index, shape in enumerate(image_placeholders):
            shape.insert_picture(pathToMyImage)

这将导致以下错误消息:

AttributeError: 'PlaceholderPicture' object has no attribute 'insert_picture'

在搔了几分钟的头之后,我注意到我正在查看PicturePlaceholder的文档,但正在访问一个PlaceholderPicture对象。我在文档中看到的区别是:

  • PicturePlaceholder是只能接受图片的占位符形状

鉴于

  • 占位符图片是用图片填充的占位符形状

现在我还没有用任何图片填充占位符。我刚刚在PowerPoint中创建了一个空占位符

所以我的问题是:
如何在PowerPoint中创建PicturePlaceHolder,以及如何使用Python pptx访问它?

如果不可能,您是否有其他解决方案

提前谢谢


Tags: 方法文档image文本模板object图片insert
1条回答
网友
1楼 · 发布于 2024-09-29 00:12:36

尝试删除有问题的“占位符”形状,并使用PowerPoint UI插入一个新的未触及的占位符。在使用PowerPoint 2016的Mac上,这是:

  • 视图>;幻灯片母版
  • 选择所需的幻灯片布局
  • 幻灯片母版>;插入占位符>;图画

如果需要,您可以调整大小和位置,但其他情况下请保持不变,然后重试。也许最好用一个新的演示文稿来完成这一切,删除除一张幻灯片外的所有幻灯片布局和所有幻灯片,以保持简单

然后使用python-pptx从该布局创建幻灯片:

slide = prs.slides.add_slide(prs.slide_layouts[0])

我想你会发现这是可行的,有一种方式,你的模板占位符已经插入了一个图像,也许是作为一个例子或什么的

几个可能的混淆区域:

  1. 用户不会在幻灯片上创建占位符形状。创建幻灯片时,幻灯片将继承其幻灯片布局的占位符

  2. 一个PicturePlaceholder形状具有元素<p:sp>,所有占位符也是如此。当图片被“插入占位符”时,p:sp元素被替换为<p:pic>元素;占位符形状将替换为图片形状

我想您会发现,模板幻灯片上的图片占位符已经被“使用”,现在是一张图片。您可以通过使用print(shape.xml)检查xml来确认这一点

解决方案是通过重新创建幻灯片来修复该幻灯片,或者在PowerPoint中打开该幻灯片并删除其内容(而不是整个形状),从而将其恢复为原始图片占位符状态。还可以删除有问题的形状,然后“重新应用布局”(可能在主工具栏的幻灯片布局区域中“重置”)

相关问题 更多 >