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_top,?margin_bottom,?margin_left,?margin_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
英文地址,請注明出處:http://en.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 時,表示這是一個二進制流文件,瀏覽器無法直接展示,需要前端處理后下載到本地。 通過請求獲取二進制數據…