PPT自动化 python-pptx - 8: 文本(text)

在使用 python-pptx 库操作 PowerPoint 文档时,理解文本的结构和处理方式至关重要。本文将深入探讨文本在形状中的组织层级、访问方式以及各级别的格式化选项。

文本容器与层级结构

  • 可容纳文本的形状: 只有自动形状 (Auto shapes) 和表格单元格 (table cells) 可以包含文本。其他类型的形状(如图片、线条)则不能。
  • 统一的处理方式: 无论文本位于哪种容器中,其操作方法都是相同的。
  • 文本的三级层级:
    1.  Shape.text_frame (形状.文本框架): 这是形状内所有文本的顶级容器。
    2.  TextFrame.paragraphs (文本框架.段落): 文本框架包含一个或多个段落(Paragraph)。
    3.  _Paragraph.runs (段落.文本片段): 每个段落包含一个或多个文本片段(Run)。字符级别的格式化应用于此层级。

1. 文本框架 (Text Frame)

  • 所有属于形状的文本都包含在其文本框架中。
  • 一个文本框架具有以下属性:
    *   垂直对齐 (vertical_anchor)
    *   边距 (margin_topmargin_bottommargin_leftmargin_right)
    *   自动换行 (word_wrap)
    *   自动调整大小行为 (auto_size)
    *   旋转角度
    *   某些 3D 视觉效果
    *   多列文本格式设置能力
  • 关键特性: 文本框架总是包含至少一个段落,即使该段落是空的。

2. 段落 (Paragraph)

  • 段落具有以下属性:
    *   行间距
    *   段前间距 (space_before)
    *   段后间距 (space_after)
    *   项目符号格式设置
    *   制表位 (Tabs)
    *   大纲/缩进级别 (level)
    *   水平对齐 (alignment)
  • 关键特性: 段落可以是空的。但如果段落包含任何文本,这些文本必须包含在一个或多个文本片段 (Run) 中。

3. 文本片段 (Run)

  • 文本片段存在的目的是提供字符级别的格式化
    *   字体 (font.name)
    *   字号 (font.size)
    *   字体颜色 (font.color)
    *   超链接目标 URL (hyperlink.address)
    *   粗体 (font.bold), 斜体 (font.italic), 下划线 (font.underline)
    *   删除线 (font.strikethrough)
    *   字距调整 (Kerning)
    *   大写样式(如:全部大写)
  • 字符格式通过访问 Run 的 .font 属性进行设置。

访问和操作段落

  • 文本框架总是至少包含一个段落。

  • 为形状添加多个段落的过程相对繁琐(因为初始就有一个段落)。例如,创建一个包含三个段落的形状:

    from pptx import Presentation
    from pptx.util import Inches# 创建一个新的演示文稿
    prs = Presentation()# 添加一张空白幻灯片
    slide_layout = prs.slide_layouts[5]  # 5 是空白幻灯片的索引
    slide = prs.slides.add_slide(slide_layout)paragraph_strs = ['Egg, bacon, sausage and spam.','Spam, bacon, sausage and spam.','Spam, egg, spam, spam, bacon and spam.'
    ]left = Inches(2)
    top = width = height = Inches(3)  # You can adjust these values
    text_box = slide.shapes.add_textbox(left, top, width, height)
    text_frame = text_box.text_frame
    text_frame.clear()  # 清除现有段落,只留下一个空段落# 处理第一个段落 (索引 0)
    p = text_frame.paragraphs[0]
    p.text = paragraph_strs[0]  # 设置第一个段落的文本# 添加并设置后续段落
    for para_str in paragraph_strs[1:]:p = text_frame.add_paragraph()  # 添加新段落p.text = para_str  # 设置新段落的文本if __name__ == "__main__":prs.save('presentation_text.potx')

添加文本

  • 只有文本片段 (Run) 才能真正包含文本。

  • 直接给形状 (.text)、文本框架 (.text) 或段落 (.text) 的 .text 属性赋值,是一种快捷方式,它会在内部创建一个 Run 并设置其文本。

  • 以下两种方式效果相同:

方式 1 (快捷方式):

shape.text = 'foobar'  # 直接设置形状的文本

方式 2 (显式操作):

text_frame = shape.text_frame
text_frame.clear()  # 清理现有内容
p = text_frame.paragraphs[0]  # 获取第一个段落
run = p.add_run()  # 在该段落中添加一个文本片段 (Run)
run.text = 'foobar'  # 设置 Run 的文本

应用格式化

1. 文本框架级别格式化

设置文本框架的属性影响整个框架内的文本布局:

from pptx.util import Inches
from pptx.enum.text import MSO_ANCHOR, MSO_AUTO_SIZEtext_frame = shape.text_frame
text_frame.text = 'Spam, eggs, and spam'  # 快捷设置文本 (会创建 Run)
text_frame.margin_bottom = Inches(0.08)   # 下边距 0.08 英寸
text_frame.margin_left = 0                # 左边距 0 英寸
text_frame.vertical_anchor = MSO_ANCHOR.TOP  # 垂直对齐:顶部
text_frame.word_wrap = False              # 关闭自动换行
text_frame.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT  # 自动调整形状大小以适应文本# 注意:
# - MSO_AUTO_SIZE 枚举定义了 auto_size 的可能值
# - MSO_ANCHOR 枚举定义了 vertical_anchor 的可能值
# - 水平对齐 (如左对齐、居中) 在段落级别 (Paragraph.alignment) 设置

2. 段落级别格式化

设置段落的属性影响整个段落的外观:

from pptx.enum.text import PP_ALIGNparagraph_strs = ['Egg, bacon, sausage and spam.','Spam, bacon, sausage and spam.','Spam, egg, spam, spam, bacon and spam.'
]text_frame = shape.text_frame
text_frame.clear()  # 清空文本框架# 设置第一个段落
p = text_frame.paragraphs[0]
p.text = paragraph_strs[0]
p.alignment = PP_ALIGN.LEFT  # 段落水平左对齐# 添加并设置后续段落 (缩进一级,类似子项目符号)
for para_str in paragraph_strs[1:]:p = text_frame.add_paragraph()  # 添加新段落p.text = para_strp.alignment = PP_ALIGN.LEFT    # 段落水平左对齐p.level = 1                    # 设置大纲/缩进级别为 1 (缩进)

3. 字符级别格式化 (文本片段 - Run)

字符格式通过 Run 的 .font 属性设置:

from pptx.dml.color import RGBColor
from pptx.enum.dml import MSO_THEME_COLOR
from pptx.util import Pttext_frame = shape.text_frame
text_frame.clear()  # 清空文本框架 (对新创建的形状非必须)p = text_frame.paragraphs[0]  # 获取第一个段落
run = p.add_run()             # 在该段落中添加一个文本片段 (Run)
run.text = 'Spam, eggs, and spam'  # 设置 Run 的文本# 设置 Run 的字体属性
font = run.font
font.name = 'Calibri'               # 字体:Calibri
font.size = Pt(18)                  # 字号:18磅
font.bold = True                    # 粗体:是
font.italic = None                  # 斜体:None 表示继承主题设置
font.color.theme_color = MSO_THEME_COLOR.ACCENT_1  # 字体颜色:主题色 - 强调颜色 1# 或者,使用绝对 RGB 值设置字体颜色 (注意:切换主题时此颜色不会改变)
font.color.rgb = RGBColor(0xFF, 0x7F, 0x50)  # RGB(255, 127, 80) - 珊瑚色# 将 Run 设置为超链接
run.hyperlink.address = 'https://github.com/scanny/python-pptx'  # 超链接目标地址

关键点总结:

  • 层级清晰: 文本框架 > 段落 > 文本片段。格式化选项随层级不同而不同。

  • 访问需谨慎: 使用 shape.has_text_frame 检查形状是否支持文本。

  • 段落管理: 文本框架初始包含一个段落,添加新段落需用 add_paragraph()

  • 文本归属: 文本内容最终存储在 Run 对象中。.text 属性是创建 Run 的快捷方式。

  • 格式化分离:

    • 框架级:整体布局(对齐、边距、换行、自动调整)。

    • 段落级:行距、间距、项目符号、缩进、水平对齐。

    • 字符级:字体、字号、颜色、样式(粗/斜/下划线)、超链接。

  • 枚举类型: 对齐 (PP_ALIGN), 垂直锚点 (MSO_ANCHOR), 自动调整 (MSO_AUTO_SIZE), 主题颜色 (MSO_THEME_COLOR) 等属性使用库提供的枚举值进行设置。

  • 单位工具: ppt.util 提供了 Inches 和 Pt (磅) 等工具函数方便尺寸设置。

  • 颜色设置: 可使用主题色 (theme_color) 或绝对 RGB 值 (rgb)。主题色会随演示文稿主题变化而变化。

掌握这些核心概念和方法,你就能在 Python 中高效、精准地操控 PowerPoint 文档中的文本内容和格式了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/91517.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91517.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用realsense进行目标检测并标识目标深度

涉及知识点都在代码中注释了,直接看代码 // This example is derived from the ssd_mobilenet_object_detection opencv demo // and adapted to be used with Intel RealSense Cameras // Please see https://github.com/opencv/opencv/blob/master/LICENSE#includ…

OpenWrt Network configuration

OpenWrt Network configuration device 和 interface 关系device device 表示底层的网络设备,如物理网卡、桥接设备(bridge)、VLAN 设备等。 通过 config device 定义,描述设备类型、端口成员、VLAN 等属性。 例如:br…

VuePress 使用详解

一、核心概念 VuePress 是 Vue.js 团队开发的静态网站生成器,专为技术文档优化,具备以下特性: Markdown 优先:原生支持 Markdown 语法扩展Vue 驱动:可在 Markdown 中使用 Vue 组件默认主题优化:内置响应式…

AI大模型前沿:Muyan-TTS开源零样本语音合成技术解析

AI大模型前沿:Muyan-TTS开源零样本语音合成技术解析引言:语音合成技术的演进与Muyan-TTS的突破性意义语音合成(Text-to-Speech, TTS)技术作为人机交互的核心接口之一,自20世纪30年代贝尔实验室首次尝试电子语音合成以来…

c# everthing.exe 通信

1 获取everthing进程 调用 Everything 搜索创建SearchWithEverything函数using Microsoft.Win32; using System; using System.Diagnostics; using System.IO; using System.Management; using System.Text;class EverythingHelper {// 方法 1:从进程获取路径publi…

Gitee:中国企业级DevOps平台的本土化突围之路

Gitee:中国企业级DevOps平台的本土化突围之路 在国内数字化转型浪潮下,DevOps平台作为企业研发效能提升的核心引擎,正在经历从工具到生态的全面升级。作为国内领先的一站式DevOps解决方案,Gitee凭借其本土化优势与全链路服务能力&…

C++法则22:运算符 ::* 和 ->* 和 ::* 是独特的整体运算符,是不可分的。

C法则22:运算符 ::* 和 ->* 和 ::* 是独特的整体运算符,是不可分的。1. ::*(成员指针声明符)作用:用于声明一个指向类成员的指针。语法:ReturnType (ClassName::*pointerName) &ClassName::MemberN…

Linux系统管理习题

Linux 系统管理练习题 1.请为此虚拟机配置以下网络参数: 1)主机名:chenyu.example.com (将chenyu改成自己名字的全拼) 2)IP 地址:192.168.100.100/24 3)默认网关:192.168…

SQL166 每天的日活数及新用户占比

SQL166 每天的日活数及新用户占比 题目理解 本SQL查询旨在分析用户活跃数据,计算两个关键指标: 每日活跃用户数(DAU)每日新增用户占比(新用户占活跃用户的比例) 解题思路 1. 数据准备阶段 首先我们需要获取所有用户的活跃记录,包括&…

【33】C# WinForm入门到精通 ——表格布局器TableLayoutPanel【属性、方法、事件、实例、源码】

WinForm 是 Windows Form 的简称,是基于 .NET Framework 平台的客户端(PC软件)开发技术,是 C# 语言中的一个重要应用。 .NET 提供了大量 Windows 风格的控件和事件,可以直接拿来使用。 本专栏内容是按照标题序号逐渐…

uv使用教程

以下是使用 Python 包管理工具 uv 的常见命令指南。uv 是由 Astral(Ruff 的开发者)开发的高性能 Python 包安装器和解析器,旨在替代 pip 和 pip-tools: 1. 安装 uv uv官网仓库 # Linux/macOS curl -Ls https://astral.sh/uv/in…

SpringBoot3.x入门到精通系列:1.1 简介与新特性

SpringBoot 3.x 简介与新特性 📖 什么是SpringBoot SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。SpringBoot集成了大量常用的第三方库配置,SpringBoot应用中这些第三方库几乎可以零配…

二、搭建springCloudAlibaba2021.1版本分布式微服务-Nacos搭建及服务注册和配置中心

nacos介绍 1、Nacos简介 Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、…

浅谈物联网嵌入式程序开发源码技术方案

在物联网蓬勃发展的时代,嵌入式程序作为连接硬件与软件的桥梁,发挥着至关重要的作用。以“边缘智能 云协同”为核心,为工业、医疗、家居、农业、智慧城市五大场景提供稳定、低功耗、可扩展的物联网终端与平台一体化解决方案。以下董技叔软件…

【笔记】重学单片机(51)

为学习嵌入式做准备,重新拿起51单片机学习。此贴为学习笔记,仅记录易忘点,实用理论基础,并不是0基础。 资料参考:清翔零基础教你学51单片机 51单片机学习笔记1. C语言中的易忘点1.1 数据类型1.2 位运算符1.3 常用控制语…

C++现代Redis客户端库redis-plus-plus详解

🚀 C现代Redis客户端库redis-plus-plus详解:告别繁琐的hiredis,拥抱现代C的Redis操作 📅 更新时间:2025年07月28日 🏷️ 标签:C | Redis | redis-plus-plus | 现代C | 后端开发 文章目录&#x…

Redis存储原理与数据模型(上)

一、Redis数据模型 1.1、查看Redis数据定义: typedef struct redisDb {kvstore *keys; /* The keyspace for this DB 指向键值存储的指针,用于快速访问和修改数据库中的键值对*/kvstore *expires; /* Timeout of keys with a t…

视频生成模型蒸馏的方法

1.fastvideo https://github.com/hao-ai-lab/FastVideohttps://github.com/hao-ai-lab/FastVideo Distillation support Recipes for video DiT, based on PCM. Support distilling/finetuning/inferencing state-of-the-art open video DiTs: 1. Mochi 2. Hunyuan. 2.l

【mysql】—— mysql中的timestamp 和 datetime(6) 有什么区别,为什么有的地方不建议使用timestamp

在 MySQL 中,TIMESTAMP 和 DATETIME(6) 都是用于存储日期和时间的数据类型,但它们在存储范围、时区处理、存储方式等方面有显著区别。 1. 核心区别对比 特性 TIMESTAMP DATETIME(6) 存储范围 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC(受限于 32 位时间戳) 1000…

前端下载文件相关

1、下载 ‘Content-Type‘: ‘application/octet-stream‘ 的文件 当后端返回的响应头中 Content-Type 为 application/octet-stream 时,表示这是一个二进制流文件,浏览器无法直接展示,需要前端处理后下载到本地。 通过请求获取二进制数据…