Spaces:
Sleeping
Sleeping
from typing import Optional, List | |
from dataclasses import dataclass, field | |
# 定义 SlideContent 数据类,表示幻灯片的内容,包括标题、要点列表(支持多级),图片路径 | |
class SlideContent: | |
title: str # 幻灯片的标题 | |
bullet_points: List[dict] = field(default_factory=list) # 要点列表,包含每个要点的文本和层级 | |
image_path: Optional[str] = None # 图片路径,默认为 None | |
# 定义 Slide 数据类,表示每张幻灯片,包括布局 ID、布局名称以及幻灯片内容。 | |
class Slide: | |
layout_id: int # 布局 ID,对应 PowerPoint 模板中的布局 | |
layout_name: str # 布局名称 | |
content: SlideContent # 幻灯片的内容,类型为 SlideContent | |
# 定义 PowerPoint 数据类,表示整个 PowerPoint 演示文稿,包括标题和幻灯片列表。 | |
class PowerPoint: | |
title: str # PowerPoint 演示文稿的标题 | |
slides: List[Slide] = field(default_factory=list) # 幻灯片列表,默认为空列表 | |
# 定义 __str__ 方法,用于打印演示文稿的详细信息 | |
def __str__(self): | |
result = [f"PowerPoint Presentation: {self.title}"] # 打印 PowerPoint 的标题 | |
for idx, slide in enumerate(self.slides, start=1): | |
result.append(f"\nSlide {idx}:") | |
result.append(f" Title: {slide.content.title}") # 打印每张幻灯片的标题 | |
result.append(f" Layout: {slide.layout_name} (ID: {slide.layout_id})") # 打印布局名称和 ID | |
# 打印项目符号列表 | |
if slide.content.bullet_points: | |
bullet_point_strs = [] | |
for bullet_point in slide.content.bullet_points: | |
text = bullet_point['text'] # 要点文本 | |
level = bullet_point['level'] # 要点层级 | |
indent = ' ' * level # 根据层级设置缩进 | |
bullet_point_strs.append(f"{indent}- {text}") | |
result.append(" Bullet Points:\n" + "\n".join(bullet_point_strs)) # 打印格式化后的项目符号 | |
# 打印图片路径 | |
if slide.content.image_path: | |
result.append(f" Image: {slide.content.image_path}") | |
return "\n".join(result) | |