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)