如何用python-pptx将单个单词置于PPT幻灯片中央?
使用python-pptx实现文本框在幻灯片中央的解决方案
问题说明
使用python-pptx生成PPT时,需要将预设列表中的单个单词分别放在每页幻灯片中央。目前已实现每页生成对应单词、设置字体大小和加粗,但无法将文本框本身定位到幻灯片中央——仅通过paragraph.vertical_anchor和paragraph.alignment只能调整文本框内文字的对齐,无法移动文本框位置,尝试注释中的多种方法均未成功。
解决思路
核心问题在于:
- 文本框的位置/尺寸由
slide.shapes.add_textbox()返回的**shape对象(txBox)**控制,而非text_frame(tf); - 初始创建文本框时用了固定宽高,导致后续计算居中时尺寸不匹配;
- 需要先设置好文字样式,确保文本框尺寸匹配内容后,再计算居中位置。
具体步骤:
- 先创建文本框(可临时设置宽高);
- 设置文字内容和样式;
- 让文本框自适应内容尺寸(或获取实际内容宽度);
- 基于幻灯片的宽高,计算文本框的居中left和top值,赋值给shape对象的对应属性。
修正后的完整代码
from pptx import Presentation from pptx.util import Inches, Pt from pptx.enum.text import MSO_ANCHOR, PP_ALIGN import random adjectifs = ["grand", "petit", "beau", "laid", "joli", "moche", "intelligent", "stupide", "gentil", "méchant"] random.shuffle(adjectifs) ppt = Presentation() blank_slide_layout = ppt.slide_layouts[6] for adjectif in adjectifs: slide = ppt.slides.add_slide(blank_slide_layout) # 先创建一个临时尺寸的文本框,后续会调整 txBox = slide.shapes.add_textbox(0, 0, Inches(1), Inches(1)) tf = txBox.text_frame # 设置文字内容和样式 tf.text = adjectif paragraph = tf.paragraphs[0] paragraph.font.size = Pt(60) paragraph.font.bold = True paragraph.vertical_anchor = MSO_ANCHOR.MIDDLE paragraph.alignment = PP_ALIGN.CENTER # 让文本框自适应内容尺寸 txBox.text_frame.fit_text(font_family="Calibri", max_size=60, bold=True) # 计算居中位置:幻灯片宽高减去文本框宽高后取半 slide_width = ppt.slide_width slide_height = ppt.slide_height txBox.left = (slide_width - txBox.width) / 2 txBox.top = (slide_height - txBox.height) / 2 ppt.save('50_Adjectifs.pptx') print("done")
关键细节说明
ppt.slide_width和ppt.slide_height直接获取幻灯片的标准宽高(避免通过slide对象获取时的属性错误);txBox.text_frame.fit_text()会自动调整文本框尺寸匹配文字内容,确保计算居中时的尺寸准确;- 最终通过修改
txBox.left和txBox.top实现文本框在幻灯片中的居中定位。
内容的提问来源于stack exchange,提问作者Auro_Bindo
相关产品推荐
相关产品推荐

