我是靠谱客的博主 高挑钢笔,最近开发中收集的这篇文章主要介绍python pptx 替换图片,python-pptx:如何重新定位图片占位符?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

I'm relatively new to the python-pptx package but I'm finding it very useful.

I've added a slide with the "title and picture and caption" layout.

SLD_LAYOUT_TITLE_AND_PICTURE_AND_CAPTION = 8

prs = Presentation(output_pptx_fp)

slide_layout = prs.slide_layouts[SLD_LAYOUT_TITLE_AND_PICTURE_AND_CAPTION]

slide = prs.slides.add_slide(slide_layout)

shapes = slide.shapes

placeholder_pict = slide.placeholders[1] # idx key, not position

placeholder_pict.insert_picture(img_path)

I'm trying to figure out how to reposition the picture placeholder.

By analogy to how I position the title placeholder on the slide, I've tried using:

placeholder_pict.left = Inches(1.96)

placeholder_pict.top = Inches(0.0)

However, this generated an AttributeError.

I've also tried using "left" and "top" arguments to the "insert_picture()" method:

left = Inches(1.96)

top = Inches(0.0)

placeholder_pict.insert_picture(img_path, left, top)

This generated a "TypeError: insert_picture() takes 2 positional arguments but 4 were given"

How do I reposition the picture placeholder on this slide? Did I miss something in the documentation?

UPDATE:

When I try (which is something scanny didn't suggest but I was curious):

picture_left = Inches(1.96)

picture_top = Inches(0.0)

picture = placeholder_pict.insert_picture(img_path, picture_left, picture_top)

I get: "TypeError: insert_picture() takes 2 positional arguments but 4 were given"

When I try (which I believe was scanny's first suggestion):

picture_left = Inches(1.96)

picture_top = Inches(0.0)

shapes.add_picture(img_path, picture_left, picture_top)

the picture is positioned where I want it but it's not in the picture container (which I can live with) and so it's not sized to fit in the picture container (which I can deal with by adding code)

When I try (which I believe was scanny's second suggestion):

picture_left = Inches(0.0)

picture_top = Inches(0.0)

placeholder_pict.left = picture_left

placeholder_pict.top = picture_top

picture = placeholder_pict.insert_picture(img_path)

I get no change. The picture appears on the slide but it's in the same position as when I don't try setting placeholder_pict.left and placeholder_pict.top at all.

When I try (which I believe was scanny's third suggestion):

picture = placeholder_pict.insert_picture(img_path)

picture.left = Inches(0)

picture.top = Inches(0)

I get no picture at all. I've tried zooming out, to see if the picture might have been placed "off the slide" but still no sign of a picture. As far as I can tell, I no longer even have the picture container.

When I try (per scanny's request):

placeholder_pict = slide.placeholders[1] # idx key, not position

print("placeholder_pict.placeholder_format.type =", placeholder_pict.placeholder_format.type)

print("placeholder_pict.left", placeholder_pict.left, "placeholder_pict.top =", placeholder_pict.top)

I get:

placeholder_pict.placeholder_format.type = PICTURE (18)

placeholder_pict.left 1792288 placeholder_pict.top = 612775

This makes me very puzzled about why I apparently can't successfuly set the placeholder_pict.left and placeholder_pict.top values.

解决方案

In light of some additional observations, it appears this case exposes some "quirks" in how PowerPoint works.

The short answer is that you need to set width and height explicitly if you want to change left and top, otherwise they default to 0, which causes the shape to "disappear".

This code should illuminate the situation a bit:

prs = Presentation()

slide_layout = prs.slide_layouts[PICTURE_LAYOUT_IDX]

slide = prs.slides.add_slide(slide_layout)

shapes = slide.shapes

placeholder = slide.placeholders[1]

print(placeholder.left.inches, placeholder.top.inches)

# ---note that all these actions are *before* the image is inserted---

placeholder.left = Inches(3)

print(placeholder.left.inches)

print(placeholder.width)

placeholder.width = Inches(3)

print(placeholder.left.inches)

print(placeholder.height)

placeholder.height = Inches(3)

print(placeholder.height)

Basically what this indicates is that a shape's inheritance of position-and-size from its layout placeholder is all-or-nothing. As soon as you set one of those explicitly, you need to set all of them.

最后

以上就是高挑钢笔为你收集整理的python pptx 替换图片,python-pptx:如何重新定位图片占位符?的全部内容,希望文章能够帮你解决python pptx 替换图片,python-pptx:如何重新定位图片占位符?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部