skills/ppt-station-skill/ppt_station/renderers/text_renderer.py

47 lines
1.3 KiB
Python
Raw Permalink Normal View History

"""
文本渲染器
"""
from typing import Dict, Any, List
from jinja2 import Template
from pptx.slide import Slide
from ppt_station.models.job import TextSpec
from ppt_station.utils.template_utils import find_shape_by_name
class TextRenderer:
"""文本渲染器"""
@staticmethod
def render(slide: Slide, texts: List[TextSpec], context: Dict[str, Any]) -> None:
"""
渲染文本到幻灯片
Args:
slide: 幻灯片对象
texts: 文本配置列表
context: 模板变量上下文
"""
for text_spec in texts or []:
shape = find_shape_by_name(slide, text_spec.target)
if not shape:
print(f"警告: 未找到文本框 '{text_spec.target}'")
continue
if not shape.has_text_frame:
print(f"警告: '{text_spec.target}' 不是文本框")
continue
# 使用 Jinja2 渲染文本
value = Template(text_spec.value).render(**context)
# 清除现有文本并添加新文本
text_frame = shape.text_frame
text_frame.clear()
# 添加段落和文本
p = text_frame.paragraphs[0]
run = p.add_run()
run.text = value