【PythonAI】4.3.3 技能实训:利用AI辅助PPT设计与排版
·
# tongyi_ppt_generator.py
import os
import json
import dashscope
from pptx import Presentation
from pptx.util import Pt
from dashscope import Generation
# 请在此处填入你的 API KEY,或者设置环境变量
# dashscope.api_key = "你的_DASHSCOPE_API_KEY"
# 建议通过环境变量设置: export DASHSCOPE_API_KEY="sk-..."
class PPTGenerator:
def __init__(self, api_key=None):
if api_key:
dashscope.api_key = api_key
elif os.getenv("DASHSCOPE_API_KEY"):
dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")
else:
raise ValueError("请设置 DASHSCOPE_API_KEY")
def get_content_from_qwen(self, topic):
"""
调用通义千问 API 生成 PPT 内容结构 (JSON)
"""
print(f"🤖 正在请求通义千问生成关于 '{topic}' 的大纲...")
# 提示词工程:强制模型返回 JSON 格式
prompt = f"""
请为一个关于“{topic}”的演示文稿生成内容。
请返回一个标准的 JSON 格式列表,不要包含 markdown 代码块标记(如 json)。
JSON 对象应包含 'title' (标题) 和 'slides' (幻灯片列表)。
每张幻灯片包含 'heading' (页标题) 和 'content' (正文要点,列表格式)。
示例结构:
{{
"title": "演示文稿主标题",
"slides": [
{{
"heading": "第一页标题",
"content": ["要点1", "要点2"]
}}
]
}}
"""
try:
response = Generation.call(
model=Generation.Models.qwen_turbo, # 或者 qwen-plus, qwen-max
prompt=prompt,
result_format='message'
)
if response.status_code == 200:
content = response.output.choices[0].message.content
# 清理可能存在的 markdown 标记
content = content.replace('```json', '').replace('```', '').strip()
return json.loads(content)
else:
print(f"❌ API 调用失败: {response.code} - {response.message}")
return None
except Exception as e:
print(f"❌ 发生错误: {e}")
return None
def create_pptx(self, data, filename="output.pptx"):
"""
使用 python-pptx 根据 JSON 数据生成文件
"""
if not data:
print("没有数据可生成 PPT")
return
prs = Presentation()
# 1. 创建封面页 (使用第一张布局,通常是标题页)
slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(slide_layout)
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = data.get('title', '无标题')
subtitle.text = "由通义千问自动生成"
# 2. 循环创建内容页
content_layout = prs.slide_layouts[1] # 使用标题+内容布局
for slide_data in data.get('slides', []):
slide = prs.slides.add_slide(content_layout)
shapes = slide.shapes
# 设置标题
title_shape = shapes.title
title_shape.text = slide_data['heading']
# 设置正文内容
body_shape = shapes.placeholders[1]
tf = body_shape.text_frame
tf.clear() # 清空默认空行
for point in slide_data['content']:
p = tf.add_paragraph()
p.text = point
p.level = 0
p.font.size = Pt(20) # 设置字体大小
p.space_after = Pt(10)
prs.save(filename)
print(f"✅ PPT 生成成功!已保存为: {filename}")
#--- 主程序入口 ---
if __name__ == "__main__":
# 替换为你的 API KEY
API_KEY = "your-tongyi-api-key-here" # 请替换为你的实际API Key
try:
generator = PPTGenerator(api_key=API_KEY)
# 输入主题
topic = "人工智能的发展趋势"
# 第一步:获取内容
ppt_data = generator.get_content_from_qwen(topic)
# 第二步:生成文件
if ppt_data:
generator.create_pptx(ppt_data, f"{topic}.pptx")
except Exception as e:
print(f"程序运行出错: {e}")
运行结果:
(ai_env) $ python3 tongyi_ppt_generator.py
正在请求通义千问生成关于 '人工智能的发展趋势' 的大纲...
✅ PPT 生成成功!已保存为: 人工智能的发展趋势.pptx
(ai_env) $
更多推荐


所有评论(0)