如何更改Python pptx对象的字体大小

5

我想要改变我的pptx演示文稿标题和正文的字体大小。我尝试使用title_shape.font = Pt(15)body_shape.font = Pt(10)进行设置,但这并没有生效。

以下是我的代码:

from pptx import Presentation, util, text
from pptx.util import Cm, Pt
import fnmatch
import os

import contentOf_pptx as contOfPres


# ..............
# Generate presentation
# ..............
prs = Presentation()
#blank_slide_layout = prs.slide_layouts[6] #blank layout, see slide layout in powerpoint
title_only = prs.slide_layouts[5] #title only, see slide layout in powerpoint 



# ..............
# set layout
# ..............
bullet_slide_layout = prs.slide_layouts[1]
slide = prs.slides.add_slide(bullet_slide_layout)
shapes = slide.shapes

title_shape = shapes.title
title_shape.font = Pt(15)

body_shape = shapes.placeholders[1]
body_shape.font = Pt(10)

# ..............
# set relevant text objects
# ..............
title_shape.text = 'Test Title'

tf = body_shape.text_frame
tf.text = 'Test SubText'


# ----------------------------------
# Store pptx
# ----------------------------------
prs.save('C:\\tests\\test_pptx_python.pptx')
2个回答

7

Shape对象没有.font属性(至少在你通过赋值添加该名称之前没有) :)

FontRun对象的特征;一个run是一系列共享相同字符格式(也称为字体)的字符序列。

Paragraph对象也有一个.font属性,用法相同,但它指定了段落中runs的默认字体。该段落中的单独runs可以通过设置其自己的字体对象的属性来覆盖该默认值。

如果您只想要一个形状的字体(这是常见的),可能最快的方法是:

shape.text_frame.paragraphs[0].font.size = Pt(15)

这个方法的有效性在于大多数形状只包含一个段落(并且所有形状都必须至少包含一个段落)。

更全面的解释是:

for paragraph in shape.text_frame.paragraphs:
    paragraph.font.size = Pt(15)

更加彻底的方式是:
for paragraph in shape.text_frame.paragraphs:
    for run in paragraph.runs:
        run.font.size = Pt(15)

关于此事的更多细节请参考此处的文档:
https://python-pptx.readthedocs.io/en/latest/user/text.html


我尝试应用您的提示,将slide.text_frame.paragraphs[0].font.size = Pt(15)插入到我的代码中,但出现了属性错误。我也按照您链接(https://python-pptx.readthedocs.io/en/latest/user/text.html)中发布的方式尝试过,并加上了if语句,就像这样:`if shapes.has_text_frame:`。不幸的是,也出现了属性错误。如果可以的话,请您发布完整的代码,以便我参考。 - Luk-StackOverflow

0

这是一个对我有效的简单方法:

slide = prs.slides.add_slide(blank_slide_layout)
slide.shapes.title.text = "The Title of My Slide"
slide.shapes.title.text_frame.paragraphs[0].font.size = Pt(15)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接