使用python-pptx插入图片时SlidePlaceholder无insert_picture属性报错如何解决
报错原因
报错是因为你调用的SlidePlaceholder对象(也就是代码里的self.slide.placeholders[2])是普通文本/内容占位符,本身没有insert_picture方法,只有专门的图片类型占位符才支持该方法。你使用的索引为3的默认幻灯片布局,第三个占位符不是图片占位符,因此调用方法时抛出属性错误。
解决方案
推荐使用直接指定位置插入图片的方案,兼容性更强,排版可控度更高:
- 首先新增依赖导入:在代码开头加入
from pptx.util import Inches,用于定义图片的尺寸和位置 - 替换插入图片的代码段:把原来的
self.slide.placeholders[2].insert_picture(data[2])替换为手动指定位置的插入代码
修改后的完整代码如下:
from pptx import Presentation from pptx.util import Inches import os prs = Presentation() class MySlide: def __init__(self, data): self.layout = prs.slide_layouts[data[3]] self.slide=prs.slides.add_slide(self.layout) self.title=self.slide.shapes.title self.title.text=data[0] self.subtitle=self.slide.placeholders[1] self.subtitle.text=data[1] if data[2] != "": # 以下参数可根据排版需求调整,单位为英寸 left = Inches(1) # 图片左边距 top = Inches(2.5) # 图片上边距,可根据副标题高度调整,保证图片在副标题下方 pic_height = Inches(4) # 图片高度 self.slide.shapes.add_picture(data[2], left, top, height=pic_height) slides = [ ["Sample Title 1", #data[0] "Sample Subtitle 1", "image1.jpg", 3], ["Sample Title 2", #data[0] "Sample Subtitle 2", "image2.jpg", 3], ["Sample Title 3", #data[0] "Sample Subtitle 3", "image3.jpg", 3] ] for each_slide in slides: MySlide(each_slide) prs.save("stack.pptx") os.startfile("stack.pptx")
如果想用厘米作为单位,把导入的Inches替换为Cm即可。
内容的提问来源于stack exchange,提问作者Abhishek Kamal
相关产品推荐
相关产品推荐

