Spaces:
Sleeping
Sleeping
File size: 2,290 Bytes
76684fa |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
from typing import Optional, List
from dataclasses import dataclass, field
# 定义 SlideContent 数据类,表示幻灯片的内容,包括标题、要点列表(支持多级),图片路径
@dataclass
class SlideContent:
title: str # 幻灯片的标题
bullet_points: List[dict] = field(default_factory=list) # 要点列表,包含每个要点的文本和层级
image_path: Optional[str] = None # 图片路径,默认为 None
# 定义 Slide 数据类,表示每张幻灯片,包括布局 ID、布局名称以及幻灯片内容。
@dataclass
class Slide:
layout_id: int # 布局 ID,对应 PowerPoint 模板中的布局
layout_name: str # 布局名称
content: SlideContent # 幻灯片的内容,类型为 SlideContent
# 定义 PowerPoint 数据类,表示整个 PowerPoint 演示文稿,包括标题和幻灯片列表。
@dataclass
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)
|