Pptx Generator
专业PPT生成器。Use when user wants to create editable PowerPoint presentations with professional layouts, multiple styles, and beautiful designs. Supports business...
专业PPT生成器。Use when user wants to create editable PowerPoint presentations with professional layouts, multiple styles, and beautiful designs. Supports business...
Real data. Real impact.
Emerging
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
专业PPT生成器,创建可编辑、排版精美、多风格的PowerPoint演示文稿。
| 风格 | 适用场景 | 特点 |
|---|---|---|
| 商务蓝 | 商业汇报 | 专业、稳重 |
| 学术白 | 学术论文 | 简洁、规范 |
| 创意紫 | 创意展示 | 时尚、活力 |
| 科技深 | 技术分享 | 现代、高端 |
| 极简灰 | 通用场景 | 简约、百搭 |
User: "帮我做一个关于AI发展的PPT" User: "生成商务风格的项目汇报PPT" User: "做一个学术论文答辩PPT"
from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN, MSO_ANCHOR from pptx.enum.shapes import MSO_SHAPEclass PPTGenerator: def init(self, style='business_blue'): self.prs = Presentation() self.style = style self.colors = self._get_colors(style) self.fonts = self._get_fonts()
def _get_colors(self, style): """获取配色方案""" schemes = { 'business_blue': { 'primary': RGBColor(30, 60, 114), 'secondary': RGBColor(70, 130, 180), 'accent': RGBColor(255, 193, 7), 'text': RGBColor(51, 51, 51), 'bg': RGBColor(255, 255, 255) }, 'academic_white': { 'primary': RGBColor(0, 51, 102), 'secondary': RGBColor(102, 102, 102), 'accent': RGBColor(204, 0, 0), 'text': RGBColor(51, 51, 51), 'bg': RGBColor(255, 255, 255) }, 'creative_purple': { 'primary': RGBColor(102, 45, 140), 'secondary': RGBColor(155, 89, 182), 'accent': RGBColor(241, 196, 15), 'text': RGBColor(51, 51, 51), 'bg': RGBColor(248, 248, 255) }, 'tech_dark': { 'primary': RGBColor(30, 30, 30), 'secondary': RGBColor(60, 60, 60), 'accent': RGBColor(0, 200, 150), 'text': RGBColor(240, 240, 240), 'bg': RGBColor(20, 20, 25) }, 'minimal_gray': { 'primary': RGBColor(80, 80, 80), 'secondary': RGBColor(150, 150, 150), 'accent': RGBColor(0, 120, 215), 'text': RGBColor(51, 51, 51), 'bg': RGBColor(250, 250, 250) } } return schemes.get(style, schemes['business_blue']) def _get_fonts(self): """获取字体配置""" return { 'title': 'Arial', 'body': 'Arial', 'chinese': 'Microsoft YaHei' } def add_title_slide(self, title, subtitle=''): """添加封面页""" slide = self.prs.slides.add_slide(self.prs.slide_layouts[6]) # 背景色 self._set_slide_bg(slide, self.colors['bg']) # 标题 left, top, width, height = Inches(1), Inches(2), Inches(8), Inches(2) txBox = slide.shapes.add_textbox(left, top, width, height) tf = txBox.text_frame tf.word_wrap = True p = tf.paragraphs[0] p.text = title p.font.size = Pt(44) p.font.bold = True p.font.color.rgb = self.colors['primary'] p.alignment = PP_ALIGN.CENTER # 副标题 if subtitle: p2 = tf.add_paragraph() p2.text = subtitle p2.font.size = Pt(20) p2.font.color.rgb = self.colors['secondary'] p2.alignment = PP_ALIGN.CENTER p2.space_before = Pt(20) return slide def add_content_slide(self, title, bullets, layout='left'): """添加内容页""" slide = self.prs.slides.add_slide(self.prs.slide_layouts[6]) # 背景色 self._set_slide_bg(slide, self.colors['bg']) # 标题栏 self._add_title_bar(slide, title) # 内容区域 left, top, width, height = Inches(0.8), Inches(1.5), Inches(8.4), Inches(5) txBox = slide.shapes.add_textbox(left, top, width, height) tf = txBox.text_frame tf.word_wrap = True for i, bullet in enumerate(bullets): p = tf.paragraphs[0] if i == 0 else tf.add_paragraph() p.text = f"• {bullet}" p.font.size = Pt(18) p.font.color.rgb = self.colors['text'] p.space_after = Pt(12) return slide def add_two_column_slide(self, title, left_content, right_content): """添加双栏内容页""" slide = self.prs.slides.add_slide(self.prs.slide_layouts[6]) self._set_slide_bg(slide, self.colors['bg']) self._add_title_bar(slide, title) # 左栏 left_box = slide.shapes.add_textbox(Inches(0.5), Inches(1.5), Inches(4.5), Inches(5)) left_tf = left_box.text_frame left_tf.word_wrap = True for i, item in enumerate(left_content): p = left_tf.paragraphs[0] if i == 0 else left_tf.add_paragraph() p.text = f"• {item}" p.font.size = Pt(16) p.font.color.rgb = self.colors['text'] p.space_after = Pt(10) # 右栏 right_box = slide.shapes.add_textbox(Inches(5.2), Inches(1.5), Inches(4.5), Inches(5)) right_tf = right_box.text_frame right_tf.word_wrap = True for i, item in enumerate(right_content): p = right_tf.paragraphs[0] if i == 0 else right_tf.add_paragraph() p.text = f"• {item}" p.font.size = Pt(16) p.font.color.rgb = self.colors['text'] p.space_after = Pt(10) return slide def add_table_slide(self, title, headers, rows): """添加表格页""" slide = self.prs.slides.add_slide(self.prs.slide_layouts[6]) self._set_slide_bg(slide, self.colors['bg']) self._add_title_bar(slide, title) # 创建表格 rows_count = len(rows) + 1 cols_count = len(headers) left, top = Inches(0.5), Inches(1.8) width, height = Inches(9), Inches(4) table_shape = slide.shapes.add_table(rows_count, cols_count, left, top, width, height) table = table_shape.table # 设置表头 for i, header in enumerate(headers): cell = table.cell(0, i) cell.text = header cell.fill.solid() cell.fill.fore_color.rgb = self.colors['primary'] for paragraph in cell.text_frame.paragraphs: paragraph.font.size = Pt(14) paragraph.font.bold = True paragraph.font.color.rgb = RGBColor(255, 255, 255) paragraph.alignment = PP_ALIGN.CENTER # 设置数据行 for row_idx, row in enumerate(rows, 1): for col_idx, cell_text in enumerate(row): cell = table.cell(row_idx, col_idx) cell.text = str(cell_text) for paragraph in cell.text_frame.paragraphs: paragraph.font.size = Pt(12) paragraph.font.color.rgb = self.colors['text'] paragraph.alignment = PP_ALIGN.CENTER return slide def add_image_slide(self, title, image_path, caption=''): """添加图片页""" slide = self.prs.slides.add_slide(self.prs.slide_layouts[6]) self._set_slide_bg(slide, self.colors['bg']) self._add_title_bar(slide, title) # 插入图片 left, top, width, height = Inches(1.5), Inches(1.8), Inches(7), Inches(4.5) slide.shapes.add_picture(image_path, left, top, width, height) # 添加说明 if caption: txBox = slide.shapes.add_textbox(Inches(1), Inches(6.5), Inches(8), Inches(0.5)) tf = txBox.text_frame p = tf.paragraphs[0] p.text = caption p.font.size = Pt(12) p.font.color.rgb = self.colors['secondary'] p.alignment = PP_ALIGN.CENTER return slide def add_summary_slide(self, title, points, conclusion): """添加总结页""" slide = self.prs.slides.add_slide(self.prs.slide_layouts[6]) self._set_slide_bg(slide, self.colors['bg']) self._add_title_bar(slide, title) # 要点 txBox = slide.shapes.add_textbox(Inches(0.8), Inches(1.5), Inches(8.4), Inches(3.5)) tf = txBox.text_frame tf.word_wrap = True for i, point in enumerate(points): p = tf.paragraphs[0] if i == 0 else tf.add_paragraph() p.text = f"✓ {point}" p.font.size = Pt(18) p.font.color.rgb = self.colors['text'] p.space_after = Pt(10) # 结论框 conclusion_box = slide.shapes.add_shape( MSO_SHAPE.ROUNDED_RECTANGLE, Inches(0.8), Inches(5.2), Inches(8.4), Inches(1.2) ) conclusion_box.fill.solid() conclusion_box.fill.fore_color.rgb = self.colors['secondary'] tf2 = conclusion_box.text_frame tf2.word_wrap = True p2 = tf2.paragraphs[0] p2.text = f"💡 {conclusion}" p2.font.size = Pt(16) p2.font.color.rgb = RGBColor(255, 255, 255) p2.alignment = PP_ALIGN.CENTER return slide def _set_slide_bg(self, slide, color): """设置幻灯片背景""" background = slide.background fill = background.fill fill.solid() fill.fore_color.rgb = color def _add_title_bar(self, slide, title): """添加标题栏""" # 标题背景 title_bar = slide.shapes.add_shape( MSO_SHAPE.RECTANGLE, Inches(0), Inches(0), Inches(10), Inches(1.2) ) title_bar.fill.solid() title_bar.fill.fore_color.rgb = self.colors['primary'] title_bar.line.fill.background() # 标题文字 txBox = slide.shapes.add_textbox(Inches(0.5), Inches(0.2), Inches(9), Inches(0.8)) tf = txBox.text_frame p = tf.paragraphs[0] p.text = title p.font.size = Pt(28) p.font.bold = True p.font.color.rgb = RGBColor(255, 255, 255) p.alignment = PP_ALIGN.LEFT def save(self, output_path): """保存PPT""" self.prs.save(output_path) return output_path使用示例
gen = PPTGenerator(style='business_blue')
添加封面
gen.add_title_slide('2026年AI行业报告', '从大模型到智能体时代')
添加内容页
gen.add_content_slide('市场概况', [ '全球AI市场规模突破3.2万亿美元', '企业AI采用率达到89%', '年度投资总额1280亿美元' ])
添加表格页
gen.add_table_slide('核心数据', ['指标', '2025', '2026', '增长率'], [ ['市场规模', '$2.1T', '$3.2T', '52%'], ['企业采用', '72%', '89%', '24%'], ['投资总额', '$790亿', '$1280亿', '62%'] ] )
添加总结页
gen.add_summary_slide('总结', [ 'AI技术持续突破', 'Agent技术走向成熟', '开源生态蓬勃发展' ], '2026年是AI发展的关键转折点')
保存
gen.save('output.pptx')
User: "做一个20页的AI行业报告PPT,商务风格" Agent: 使用 PPTGenerator(style='business_blue') 生成User: "做一个学术答辩PPT" Agent: 使用 PPTGenerator(style='academic_white') 生成
User: "做一个技术分享PPT,科技风格" Agent: 使用 PPTGenerator(style='tech_dark') 生成
No automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.