当使用 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/: 归档完成的变更
2.2 KiB
2.2 KiB
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 文本对齐方式为
left、center、right之一 - THEN 系统正确应用对应的对齐方式
Scenario: 文本框默认启用自动换行
- WHEN 系统渲染任何文本元素
- THEN 系统设置
text_frame.word_wrap = True,文字在文本框边界处自动换行