1
0

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/: 归档完成的变更
This commit is contained in:
2026-03-04 12:18:23 +08:00
parent 900a38b705
commit 5b367f7ef3
8 changed files with 343 additions and 30 deletions

View File

@@ -8,7 +8,7 @@ Element rendering系统负责将 YAML 中定义的各类元素(文本、图片
### Requirement: 系统必须支持文本元素渲染
系统 SHALL 将 YAML 中定义的文本元素渲染为 PPTX 文本框,并默认启用文字自动换行。
系统 SHALL 将 YAML 中定义的文本元素渲染为 PPTX 文本框,并默认启用文字自动换行。当文本内容包含换行符YAML 多行字符串语法)时,系统必须将所有字体样式(大小、粗体、斜体、颜色、对齐)应用到文本框中的每个段落。
#### Scenario: 渲染基本文本元素
@@ -20,6 +20,23 @@ Element rendering系统负责将 YAML 中定义的各类元素(文本、图片
- **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}`