python-pptx:如何重新定位图片占位符? [英] python-pptx: How canI reposition the picture placeholder?

查看:489
本文介绍了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)

但是,这会产生AttributeError.

However, this generated an AttributeError.

我也尝试过对"insert_picture()"方法使用"left"和"top"参数:

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)

这会生成"TypeError:insert_picture()带有2个位置参数,但给出了4个位置参数"

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?

更新:

当我尝试时(这几乎没什么建议,但我很好奇):

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)

我得到:"TypeError:insert_picture()接受2个位置参数,但给出了4个位置参数"

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)

我没有零钱.图片出现在幻灯片上,但与我完全不设置placeholder_pict.left和placeholder_pict.top的位置相同.

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.

当我尝试(根据scanny的请求)时:

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)

我知道了:
placeholder_pict.placeholder_format.type =图片(18)
placeholder_pict.left 1792288 placeholder_pict.top = 612775

I get:
placeholder_pict.placeholder_format.type = PICTURE (18)
placeholder_pict.left 1792288 placeholder_pict.top = 612775

这让我很困惑,为什么我显然无法成功设置placeholder_pict.left和placeholder_pict.top值.

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

推荐答案

根据其他一些观察,看来这种情况暴露了PowerPoint工作方式的一些怪癖".

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

简单的答案是,如果要更改左和上,则需要显式设置宽度和高度,否则默认设置为0,这会导致形状消失".

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:如何重新定位图片占位符?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆