1
0
Files
lanyuanxiaoyao 5b367f7ef3 fix: 修复多行文本渲染时字号只应用于第一段的bug
当使用 YAML 多行字符串语法定义文本内容时,python-pptx 会自动
将包含换行符的文本分割成多个段落。修改 _render_text 方法使其
遍历所有段落并应用相同的字体样式(大小、粗体、斜体、颜色、对齐)。

主要变更:
- renderers/pptx_renderer.py: 将 p = tf.paragraphs[0] 改为 for p in tf.paragraphs
- tests/unit/test_renderers/test_pptx_renderer.py: 新增多行文本测试用例
- openspec/specs/element-rendering/spec.md: 更新 spec 文档
- openspec/changes/archive/: 归档完成的变更
2026-03-04 12:18:23 +08:00

2.2 KiB
Raw Blame History

Element Rendering - Delta Spec

MODIFIED Requirements

Requirement: 系统必须支持文本元素渲染

系统 SHALL 将 YAML 中定义的文本元素渲染为 PPTX 文本框并默认启用文字自动换行。当文本内容包含换行符YAML 多行字符串语法)时,系统必须将所有字体样式(大小、粗体、斜体、颜色、对齐)应用到文本框中的每个段落。

Scenario: 渲染基本文本元素

  • WHEN 元素定义为 {type: text, content: "Hello", box: [1, 2, 8, 3]}
  • THEN 系统在幻灯片的 (1, 2) 位置创建 8x3 英寸的文本框,内容为 "Hello"

Scenario: 应用文本字体样式

  • WHEN 文本元素定义了 font: {size: 32, bold: true, color: "#333333"}
  • THEN 系统将文本设置为 32pt、粗体、颜色为 #333333

Scenario: 多行文本样式应用到所有段落

  • WHEN 文本内容包含换行符(如 YAML 多行字符串 content: |\n 第一行\n 第二行\n 第三行)且定义了 font: {size: 12}
  • THEN 系统将 12pt 字号应用到所有段落(第一行、第二行、第三行)
  • AND 每个段落的字体大小都应一致

Scenario: 多行文本其他样式应用到所有段落

  • WHEN 文本内容包含换行符且定义了 font: {size: 12, bold: true, italic: true, color: "#ff0000", align: center}
  • THEN 系统将所有样式(大小、粗体、斜体、颜色、对齐)应用到所有段落
  • AND 每个段落的样式都应一致

Scenario: 单行文本样式行为不变

  • WHEN 文本内容不包含换行符且定义了 font: {size: 12}
  • THEN 系统将 12pt 字号应用到文本(行为与之前相同)

Scenario: 应用文本对齐方式

  • WHEN 文本元素定义了 font: {align: center}
  • THEN 系统将文本设置为居中对齐

Scenario: 支持多种对齐方式

  • WHEN 文本对齐方式为 leftcenterright 之一
  • THEN 系统正确应用对应的对齐方式

Scenario: 文本框默认启用自动换行

  • WHEN 系统渲染任何文本元素
  • THEN 系统设置 text_frame.word_wrap = True,文字在文本框边界处自动换行