when-creating-presentations-use-pptx-generation
关于
This skill generates enterprise-grade PowerPoint presentations by enforcing structured workflows and design constraints. It produces accessible, professionally formatted decks with proper slide structure, notes, and WCAG compliance. Use it when you need automated generation of board decks, reports, or data-driven presentations.
快速安装
Claude Code
推荐/plugin add https://github.com/DNYoussef/ai-chrome-extensiongit clone https://github.com/DNYoussef/ai-chrome-extension.git ~/.claude/skills/when-creating-presentations-use-pptx-generation在 Claude Code 中复制并粘贴此命令以安装该技能
技能文档
PPTX Generation - Enterprise Presentation Creator
Overview
Enterprise-grade PowerPoint deck generation system using evidence-based prompting techniques, workflow enforcement, and constraint-based design for professional presentations (board decks, reports, analyses). Supports 30+ slide decks with consistent visual quality and accessibility compliance.
When to Use
- Creating board-level presentations
- Quarterly business reviews
- Technical documentation slides
- Data-heavy reports
- Executive summaries
- Client proposals
- Training materials
Phase 1: Research Content (8 min)
Objective
Gather and structure presentation information
Agent: Researcher
Step 1.1: Content Gathering
const contentStructure = {
metadata: {
title: 'Presentation Title',
subtitle: 'Subtitle',
author: 'Author Name',
date: new Date(),
audience: 'executive|technical|general',
purpose: 'inform|persuade|instruct'
},
outline: [
{
section: 'Introduction',
slides: ['Title', 'Agenda', 'Executive Summary']
},
{
section: 'Main Content',
slides: ['Key Points', 'Data Analysis', 'Recommendations']
},
{
section: 'Conclusion',
slides: ['Summary', 'Next Steps', 'Q&A']
}
],
dataPoints: extractDataPoints(),
visualizations: identifyVisualizations()
};
await memory.store('pptx/content-structure', contentStructure);
Step 1.2: Data Analysis
async function analyzeData(data) {
return {
tables: extractTables(data),
charts: identifyChartOpportunities(data),
trends: analyzeTrends(data),
insights: generateInsights(data)
};
}
Validation Criteria
- Content structure defined
- Data points extracted
- Visualization types identified
- Outline complete
Phase 2: Design Layout (7 min)
Objective
Create presentation design following constraints
Agent: Coder
Step 2.1: Define Design System
const designSystem = {
colors: {
primary: '#2C3E50',
secondary: '#3498DB',
accent: '#E74C3C',
text: '#2C3E50',
background: '#FFFFFF'
},
fonts: {
heading: { face: 'Calibri', size: 32, bold: true },
subheading: { face: 'Calibri', size: 24, bold: true },
body: { face: 'Calibri', size: 18 },
caption: { face: 'Calibri', size: 14, italic: true }
},
layout: {
marginX: 0.5,
marginY: 0.5,
titleY: 0.5,
contentY: 1.5,
spacing: 0.3
},
accessibility: {
contrastRatio: 4.5, // WCAG 2.1 AA
altText: true,
readingOrder: true
}
};
await memory.store('pptx/design-system', designSystem);
Step 2.2: Create Slide Layouts
const slideLayouts = {
title: {
type: 'title',
elements: [
{ type: 'text', content: '{title}', style: 'heading', position: { x: 1, y: 2.5 } },
{ type: 'text', content: '{subtitle}', style: 'subheading', position: { x: 1, y: 3.5 } }
]
},
content: {
type: 'content',
elements: [
{ type: 'text', content: '{title}', style: 'heading', position: { x: 0.5, y: 0.5 } },
{ type: 'text', content: '{body}', style: 'body', position: { x: 0.5, y: 1.5 } }
]
},
twoColumn: {
type: 'two-column',
elements: [
{ type: 'text', content: '{left}', position: { x: 0.5, y: 1.5, w: 4.5 } },
{ type: 'text', content: '{right}', position: { x: 5.5, y: 1.5, w: 4.5 } }
]
},
dataVisualization: {
type: 'chart',
elements: [
{ type: 'text', content: '{title}', style: 'heading', position: { x: 0.5, y: 0.5 } },
{ type: 'chart', chartData: '{data}', position: { x: 1, y: 1.5, w: 8, h: 4 } }
]
}
};
await memory.store('pptx/layouts', slideLayouts);
Validation Criteria
- Design system defined
- Color contrast meets WCAG 2.1 AA
- Layouts created
- Accessibility constraints applied
Phase 3: Generate Slides (12 min)
Objective
Create PowerPoint file with all slides
Agent: Coder
Step 3.1: Initialize Presentation
const pptxgen = require('pptxgenjs');
const pres = new pptxgen();
// Apply design system
pres.layout = 'LAYOUT_WIDE';
pres.author = contentStructure.metadata.author;
pres.title = contentStructure.metadata.title;
pres.subject = contentStructure.metadata.purpose;
Step 3.2: Generate Slides
async function generateSlides(outline, designSystem, layouts) {
for (const section of outline) {
for (const slideData of section.slides) {
const layout = selectLayout(slideData.type, layouts);
const slide = pres.addSlide();
// Add title
slide.addText(slideData.title, {
x: layout.title.x,
y: layout.title.y,
w: layout.title.w || 9,
h: layout.title.h || 0.75,
fontSize: designSystem.fonts.heading.size,
bold: designSystem.fonts.heading.bold,
color: designSystem.colors.text
});
// Add content based on slide type
if (slideData.type === 'content') {
slide.addText(slideData.content, {
x: layout.content.x,
y: layout.content.y,
w: layout.content.w || 9,
h: layout.content.h || 4,
fontSize: designSystem.fonts.body.size,
color: designSystem.colors.text,
bullet: slideData.bullet || false
});
}
// Add visualizations
if (slideData.chart) {
slide.addChart(slideData.chart.type, slideData.chart.data, {
x: layout.chart.x,
y: layout.chart.y,
w: layout.chart.w,
h: layout.chart.h,
showTitle: true,
showLegend: true
});
}
// Add accessibility
if (slideData.altText) {
slide.addNotes(slideData.altText); // Alt text for screen readers
}
}
}
return pres;
}
Step 3.3: Add Data Visualizations
function addChart(slide, chartData, position, designSystem) {
const chartConfig = {
x: position.x,
y: position.y,
w: position.w,
h: position.h,
chartColors: [
designSystem.colors.primary,
designSystem.colors.secondary,
designSystem.colors.accent
],
showLabel: true,
showValue: true,
showLegend: true,
legendPos: 'r',
valAxisMaxVal: Math.max(...chartData.values) * 1.2
};
slide.addChart(chartData.type, chartData.data, chartConfig);
}
Validation Criteria
- All slides generated
- Design system applied consistently
- Charts and visuals rendered
- Alt text added for accessibility
Phase 4: Validate Quality (8 min)
Objective
Ensure accessibility and quality standards
Agent: Coder
Step 4.1: Accessibility Scan
async function scanAccessibility(pres) {
const issues = [];
for (const slide of pres.slides) {
// Check color contrast
for (const element of slide.elements) {
if (element.color && element.background) {
const contrast = calculateContrastRatio(element.color, element.background);
if (contrast < 4.5) {
issues.push({
slide: slide.index,
type: 'COLOR_CONTRAST',
severity: 'HIGH',
message: `Contrast ratio ${contrast} < 4.5 (WCAG 2.1 AA)`
});
}
}
}
// Check alt text
if (slide.hasImages() && !slide.hasAltText()) {
issues.push({
slide: slide.index,
type: 'MISSING_ALT_TEXT',
severity: 'HIGH',
message: 'Images missing alt text for screen readers'
});
}
// Check reading order
if (!slide.hasReadingOrder()) {
issues.push({
slide: slide.index,
type: 'READING_ORDER',
severity: 'MEDIUM',
message: 'Reading order not defined'
});
}
}
await memory.store('pptx/accessibility-issues', issues);
return issues;
}
Step 4.2: Quality Checks
const qualityChecks = {
consistency: checkDesignConsistency(pres),
readability: checkTextReadability(pres),
dataIntegrity: validateChartData(pres),
fileSize: checkFileSize(pres),
slideCount: pres.slides.length <= 40 // Optimal for attention
};
const passed = Object.values(qualityChecks).every(check => check.passed);
Validation Criteria
- WCAG 2.1 AA compliance
- No critical accessibility issues
- Quality checks passed
- File size reasonable
Phase 5: Export Final (5 min)
Objective
Generate final presentation file
Agent: Coder
Step 5.1: Generate PPTX File
async function exportPresentation(pres, filename) {
await pres.writeFile({ fileName: filename });
console.log(`✅ Presentation saved: ${filename}`);
// Generate accessibility report
const report = {
filename,
slides: pres.slides.length,
accessibilityIssues: await memory.retrieve('pptx/accessibility-issues'),
qualityScore: calculateQualityScore(pres),
wcagCompliance: 'AA',
generatedAt: new Date()
};
await fs.writeFile(
filename.replace('.pptx', '-accessibility-report.json'),
JSON.stringify(report, null, 2)
);
}
Step 5.2: Generate Documentation
# Presentation Documentation
## Metadata
- Title: ${metadata.title}
- Slides: ${slideCount}
- Generated: ${timestamp}
## Design System
- Colors: ${colors}
- Fonts: ${fonts}
- Accessibility: WCAG 2.1 AA
## Slide Breakdown
${outline.map(section => `
### ${section.name}
${section.slides.map(slide => `- ${slide.title}`).join('\n')}
`).join('\n')}
## Quality Metrics
- Accessibility Score: ${accessibilityScore}/100
- Readability Score: ${readabilityScore}/100
- Design Consistency: ${consistencyScore}/100
Validation Criteria
- PPTX file generated
- Accessibility report created
- Documentation complete
- Ready for distribution
Success Metrics
- All slides generated successfully
- WCAG 2.1 AA compliance achieved
- Quality score > 85/100
- File size < 50MB
Skill Completion
Outputs:
- presentation.pptx: Final PowerPoint file
- accessibility-report.json: Compliance analysis
- presentation-doc.md: Generation documentation
- slide-notes.txt: Speaker notes
Complete when PPTX generated with WCAG 2.1 AA compliance.
GitHub 仓库
相关推荐技能
when-creating-skill-template-use-skill-builder
其他这个Skill帮助开发者快速创建符合规范的Claude Code Skills模板。它能自动生成包含YAML frontmatter、渐进式文档结构和完整目录组织的技能框架。适用于需要创建可复用技能的开发场景,确保遵循最佳实践和规范要求。
when-documenting-code-use-doc-generator
元这个Claude Skill能自动为代码库生成全面的文档,包括API文档、README文件和架构图。它通过分析代码结构来创建准确的文档,适用于需要快速生成或完善项目文档的场景。开发者只需用简单的触发词如"生成文档"或"创建API文档"即可启动自动化文档流程。
Report Writer
其他Report Writer能够将研究数据和内容快速转换为专业报告,支持技术、商业和学术三种风格。它提供结构化输出,可自动生成目录并适配不同受众的需求。开发者可利用此工具高效生成格式规范、内容清晰的Markdown报告文档。
technical-writing
通信该Skill帮助开发者基于实际经验撰写清晰、有吸引力的技术内容,适用于博客、文档、教程和技术文章。它提供结构化指导,强调以价值为先、展示实例、优化可读性和精简内容。关键特性包括预设的写作框架、实用检查清单,并集成了质量分析和API验证代理来优化输出。
