You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用python-pptx获取PPT文本框字号时一直显示默认值,求解决

解决python-pptx获取PPT文本字号显示“Default size”的问题

问题核心在于:run.font.size仅会返回手动显式设置的字号,如果文本使用的是PPT默认样式(未手动修改字号),这个属性会返回None——因为继承的样式不会存储在run层级。要获取真实的字号,需要逐层向上查找继承的样式:

  • 先检查当前run的字号
  • 若不存在,检查所在段落的字号
  • 若仍不存在,检查文本框的默认字号
  • 最后可以从幻灯片母版的主题样式中获取全局默认字号

以下是修改后的代码,实现完整的字号获取逻辑:

from pptx import Presentation
from pptx.enum.text import MSO_TEXT_TYPE

pptx_file = 'education.pptx'
presentation = Presentation(pptx_file)
# 获取母版的正文默认字号(PPT常见默认值为12pt)
master_body_font_size = presentation.slide_master.text_styles[MSO_TEXT_TYPE.BODY].font.size
master_body_size_pt = master_body_font_size.pt if master_body_font_size else 12

for slide_number, slide in enumerate(presentation.slides):
    for shape in slide.shapes:
        if shape.has_text_frame:
            text_frame = shape.text_frame
            # 先取文本框的默认字号,没有则用母版默认
            text_frame_size_pt = text_frame.font.size.pt if text_frame.font.size else master_body_size_pt
            
            for paragraph in text_frame.paragraphs:
                # 再取段落的默认字号,没有则用文本框层级的字号
                para_size_pt = paragraph.font.size.pt if paragraph.font.size else text_frame_size_pt
                
                for run in paragraph.runs:
                    # 优先取run的显式字号,没有则向上继承
                    font_size_pt = run.font.size.pt if run.font.size else para_size_pt
                    print(f"Slide {slide_number + 1}, Text: {run.text}, Font size: {font_size_pt}pt")

补充说明

PPT的样式继承链是:Run → Paragraph → TextFrame → SlideMaster → Theme,只要某一层级有显式设置的字号,就会覆盖上层的默认值;如果所有层级都没设置,最终会使用主题的正文默认字号。

内容的提问来源于stack exchange,提问作者fazliddin fayziev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:27:40