Files
hmo 04db423416 Initial commit: skills library
- 70 skills with code and documentation
- Add .gitignore (ignore __pycache__, output/, temp/, venv/)
- Clean up test intermediates and caches
2026-04-26 19:27:40 +08:00

248 lines
7.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PPTX Programming - Python-pptx 编程生成PPT技能
## 📋 元数据
- **Skill 名称**: pptx-programming
- **版本**: 1.0.0
- **描述**: 使用 python-pptx 库编程生成专业PPT,支持4:3投影仪适配、布局一致性、垂直居中、装饰元素等高级功能
- **作者**: 小小莫
- **标签**: ppt, python-pptx, presentation, programming, layout, design
- **触发词**: python生成PPT、编程做PPT、python-pptx、专业PPT设计、4:3投影仪PPT
## ✨ 功能特性
### 核心功能
- 🎯 **4:3投影仪适配** - 专为投影仪设计的10x7.5英寸比例
- 📐 **布局一致性** - 并列元素等宽等高、等间距、同字体
- 🎨 **专业设计原则** - 六大设计原则自动实现
- 🖼️ **装饰元素** - 音乐符号、边框、渐变背景等
- 📊 **垂直居中** - 标签文字自动垂直居中
- 🔍 **溢出检查** - 自动检查并修复边界溢出
### 设计原则实现
1. **并列关系一致性** - 同一行标签/卡片统一样式
2. **独立元素不重叠** - 逻辑独立元素绝对不重叠
3. **标签文字垂直居中** - `vertical_anchor = MSO_ANCHOR.MIDDLE`
4. **溢出彻底解决** - 必须100%无溢出
5. **视觉层次清晰** - 标题>副标题>正文>说明文字
6. **4:3投影仪适配** - 10x7.5英寸,四周0.5英寸安全边距
## 🚀 快速开始
### 基础设置
```python
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.dml.color import RGBColor
# 4:3投影仪比例
prs = Presentation()
prs.slide_width = Inches(10) # 10英寸宽
prs.slide_height = Inches(7.5) # 7.5英寸高
```
### 配色方案(钢琴主题)
```python
DARK_BLUE = RGBColor(26, 26, 46) # 深蓝背景
GOLD = RGBColor(212, 175, 55) # 金色装饰
ROSE = RGBColor(183, 110, 121) # 玫瑰金高亮
LIGHT = RGBColor(248, 245, 240) # 浅米背景
WHITE = RGBColor(255, 255, 255) # 白色文字
GRAY = RGBColor(85, 85, 85) # 灰色说明
```
## 📖 核心功能详解
### 1. 标签垂直居中实现
```python
def create_centered_tag(slide, x, y, width, height, text):
"""创建垂直居中的标签"""
tag = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(width), Inches(height))
tf = tag.text_frame
tf.word_wrap = True
tf.vertical_anchor = MSO_ANCHOR.MIDDLE # 关键:垂直居中
p = tf.paragraphs[0]
p.text = text
p.font.size = Pt(9)
p.alignment = PP_ALIGN.CENTER # 水平居中
return tag
```
### 2. 并列标签等宽布局
```python
def create_equal_width_tags(slide, start_x, start_y, total_width, tags, height=0.3):
"""创建等宽并列标签"""
tag_width = total_width / len(tags) - 0.15 # 每个标签宽度,留出间距
for i, tag_text in enumerate(tags):
x = start_x + i * (tag_width + 0.15) # 等间距分布
create_centered_tag(slide, x, start_y, tag_width, height, tag_text)
```
### 3. 装饰元素
```python
def add_musical_note(slide, x, y, size=0.3):
"""添加音乐符号装饰"""
from pptx.enum.shapes import MSO_SHAPE
# 音符头
head = slide.shapes.add_shape(
MSO_SHAPE.OVAL, Inches(x), Inches(y), Inches(size), Inches(size)
)
head.fill.solid()
head.fill.fore_color.rgb = GOLD
head.line.color.rgb = GOLD
# 音符杆
stem = slide.shapes.add_shape(
MSO_SHAPE.RECTANGLE,
Inches(x + size * 0.4),
Inches(y - size * 0.8),
Inches(size * 0.2),
Inches(size * 1.2),
)
stem.fill.solid()
stem.fill.fore_color.rgb = GOLD
stem.line.color.rgb = GOLD
```
### 4. 检查脚本
```python
def check_ppt_layout(ppt_path):
"""检查PPT布局问题"""
prs = Presentation(ppt_path)
slide_width = prs.slide_width
slide_height = prs.slide_height
issues = []
for slide_idx, slide in enumerate(prs.slides):
for shape in slide.shapes:
if not hasattr(shape, 'has_text_frame') or not shape.has_text_frame:
continue
left = getattr(shape, 'left', 0)
top = getattr(shape, 'top', 0)
width = getattr(shape, 'width', 0)
height = getattr(shape, 'height', 0)
right = left + width
bottom = top + height
# 检查边界溢出
if right > slide_width:
overflow = (right - slide_width) / Inches(1)
issues.append(f"幻灯片{slide_idx+1}: 右侧溢出 {overflow:.2f}英寸")
if bottom > slide_height:
overflow = (bottom - slide_height) / Inches(1)
issues.append(f"幻灯片{slide_idx+1}: 底部溢出 {overflow:.2f}英寸")
return issues
```
## 📁 项目结构
```
projects/青年钢琴集体课/01-课程设计/ppt/
├── 最终成果/体验课PPT_专业版.pptx # 最终成果
├── 源码/
│ ├── create-ppt-v3.py # 主生成脚本(574行完整实现)
│ ├── simple-check.py # 简单检查脚本
│ └── check-ppt-layout.py # 详细布局检查
└── 归档版本/ # 7个中间版本
```
## 🎯 使用场景
### 1. 专业演示文稿
- 企业培训PPT
- 教育课程PPT
- 产品介绍PPT
- 会议演示PPT
### 2. 特定需求
- 4:3投影仪适配
- 品牌一致性设计
- 批量生成PPT
- 自动化PPT报告
### 3. 设计约束
- 必须遵循六大设计原则
- 必须彻底解决溢出问题
- 必须保持布局一致性
- 必须适配目标显示设备
## ⚠️ 注意事项
### 常见错误
- ❌ 并列标签样式不一致
- ❌ 独立元素重叠
- ❌ 标签文字不垂直居中
- ❌ 溢出问题"大为改善"但不彻底
- ❌ 4:3内容直接转为16:9
### 最佳实践
- ✅ 先定义设计原则,再写代码
- ✅ 使用函数封装重复逻辑
- ✅ 运行检查脚本验证布局
- ✅ 保存中间版本便于调试
- ✅ 记录设计决策和原则
## 🔗 相关技能
- **file-reader** - 文档读写编辑(包含PPT基础操作)
- **pptx-programming** - 本技能,编程生成专业PPT
## 📚 参考框架
本技能可使用以下通用框架加速开发:
### PPTGenerator 框架
位置: `.opencode/skills/ppt-generator/scripts/`
```python
# 使用通用框架
from ppt_generator import PPTGenerator, PianoCourseTemplate
# 方式1:使用模板
template = PianoCourseTemplate()
template.generate(
title="课程标题",
teacher={"name": "讲师", "title": "职位"},
output_path="课程.pptx"
)
# 方式2:使用基础API
gen = PPTGenerator()
gen.use_theme("professional_blue")
gen.enable_wps_compatibility()
slide = gen.add_slide(layout="blank")
slide.add_title("标题")
slide.add_textbox("内容")
gen.save("output.pptx")
```
### 核心功能
- 主题系统 (professional_blue, warm_gold, modern_minimal)
- 样式常量 (title_large, body_medium等)
- WPS兼容性支持
- 装饰边框、音乐符号
- 卡片容器布局
### 模板系统
- PianoCourseTemplate - 钢琴课程模板
- BusinessReportTemplate - 企业报告模板
- EducationCourseTemplate - 教育课程模板
## 📄 许可证
MIT License
---
**创建时间**: 2025-02-23
**基于项目**: 钢琴演奏入门班体验课PPT
**目标受众**: 25-40岁女性(75%+
**设计风格**: 优雅音乐主题,专业简洁