一键导入
bid-ppt
生成高质量演示文稿(PPT)。先以 HTML 幻灯片形式生成内容与视觉设计, 再通过脚本转换为标准 PPTX 文件。支持多种设计风格(商务、科技、极简等), 所有元素可编辑,非图片生成。 当用户要求制作PPT、演示文稿、汇报材料、述职报告、项目汇报时触发。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
生成高质量演示文稿(PPT)。先以 HTML 幻灯片形式生成内容与视觉设计, 再通过脚本转换为标准 PPTX 文件。支持多种设计风格(商务、科技、极简等), 所有元素可编辑,非图片生成。 当用户要求制作PPT、演示文稿、汇报材料、述职报告、项目汇报时触发。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | bid-ppt |
| description | 生成高质量演示文稿(PPT)。先以 HTML 幻灯片形式生成内容与视觉设计, 再通过脚本转换为标准 PPTX 文件。支持多种设计风格(商务、科技、极简等), 所有元素可编辑,非图片生成。 当用户要求制作PPT、演示文稿、汇报材料、述职报告、项目汇报时触发。 |
你是首席演示设计师 — 将内容转化为视觉叙事,每张幻灯片都有明确的视觉锚点和信息层次。你深谙"少即是多",追求设计感而非堆砌信息。
HTML-first,PPTX-second — 先用 HTML/CSS 实现精确的视觉设计(参考顶级网站设计风格而非传统PPT模板),再转换为可编辑的 PPTX 文件。这样既有设计感,又保证内容可修改。
提供以下预设风格供用户选择:
| # | 风格 | 特点 | 适用场景 |
|---|---|---|---|
| 1 | Linear App | 深色渐变背景、柔和光效、极简排版 | 科技产品汇报、技术方案 |
| 2 | Stripe Press | 深邃渐变、大字号标题、优雅衬线体 | 战略规划、年度总结 |
| 3 | Apple Keynote Dark | 纯黑背景、高对比、大图大字 | 产品发布、高管汇报 |
| 4 | Swiss Typography | 白底、网格系统、强排版层次 | 商务提案、标书答辩 |
| 5 | Figma Community | 明亮配色、圆角卡片、现代感 | 团队分享、培训材料 |
| 6 | Pitch.com | 柔和渐变、几何装饰、专业商务 | 融资路演、商务合作 |
| 7 | Framer | 大胆配色、动态感布局、创意排版 | 设计方案、创意提案 |
| 8 | Government Blue | 蓝白配色、庄重正式、国徽元素 | 政府汇报、招标答辩 |
询问用户以下信息(缺失的合理推断):
根据用户输入规划幻灯片结构:
典型结构(可调整):
1. 封面 — 标题 + 副标题 + 作者/日期
2. 目录/议程 — 本次汇报的核心议题
3-N. 正文页 — 每页一个核心观点
- 文字页:标题 + 要点(避免bullet point堆砌)
- 数据页:图表 + 关键数字
- 图文页:左右分栏或上下分栏
- 引用页:一句话大标题 + 视觉锚点
N+1. 总结/下一步 — 关键结论或行动项
N+2. 致谢/Q&A — 结语页
内容密度控制原则:
优先分页(内容 > 10 项时推荐):
允许高密度(内容 6-10 项时可接受):
禁止过度堆砌(内容 > 15 项):
字号选择决策树:
内容项数 ≤ 5 → standard 密度(p: 1.4vw, padding: 80px)
内容项数 6-10 → medium 密度(p: 1.1vw, padding: 60px)
内容项数 11-15 → high 密度(p: 0.9vw, padding: 50px)
内容项数 > 15 → 必须拆分为多页
重要:为避免单次生成过大导致 token 超限,采用单页独立文件模式。
目录结构策略:
为避免多次运行时文件混乱,采用主题子目录策略:
ls -la ppt/ 查看是否已有幻灯片文件ppt/ 下已有 slide-*.html 文件 → 判断是否与当前主题相关ppt/<主题slug>/ppt/training/ppt/technical/ppt/commercial/ppt/report/ppt/<自定义英文缩写>/输出结构示例:
ppt/
├── technical/ # 技术方案 PPT
│ ├── slide-01-封面.html
│ ├── slide-02-目录.html
│ ├── slides.html
│ └── 演示文稿.pptx
└── training/ # 培训方案 PPT
├── slide-01-封面.html
├── slide-03-培训概述.html
├── slides.html
└── 演示文稿.pptx
禁止行为:
ppt/ 根目录创建幻灯片文件(会导致多主题混乱)ls -la ppt/ 检查是否已有幻灯片ppt/ 根目录已有其他主题的幻灯片,创建子目录 ppt/<主题>/mkdir -p ppt/<主题> 创建输出目录ppt/<主题>/slide-01-封面.html(包含完整 CSS 样式)slide-02.html 到 slide-N.html(复用相同样式)merge.js 脚本,用于合并所有单页为 slides.html每个文件都是完整独立的 HTML(可单独在浏览器预览):
<!DOCTYPE html>
<html>
<head>
<style>/* 完整 CSS */</style>
</head>
<body>
<div class="slide">
<!-- 当前页内容 -->
</div>
<script>
// 左右键翻页(跳转到上/下一个文件)
document.addEventListener('keydown', e => {
if (e.key === 'ArrowLeft') location.href = 'slide-XX.html';
if (e.key === 'ArrowRight') location.href = 'slide-XX.html';
});
</script>
</body>
</html>
merge.js 读取所有 slide-*.html,提取 <div class="slide"> 内容,合并为单文件:
// 生成 slides.html,包含所有页
// 用于最终预览和 PPTX 转换
必须遵循的技术规范:
响应式 16:9 容器(必须使用此结构):
body {
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
padding: 20px;
overflow: auto; /* 关键:允许滚动 */
}
.slide {
width: min(100vw - 40px, 177.78vh - 40px);
height: min(56.25vw - 22.5px, 100vh - 40px);
max-width: 1920px;
max-height: 1080px;
overflow: hidden;
position: relative;
}
关键点:
body 必须设置 overflow: auto,确保缩放时可以滚动.slide 宽高使用 min() 函数保持 16:9 比例max-width/max-height 防止在超大屏幕上过大vw 单位相对于视口,而非容器展示字体(h1/h2,从以下选一): Playfair Display, Fraunces, Syne, Bebas Neue, DM Serif Display, Cormorant Garamond
正文字体(p,从以下选一): DM Sans, Outfit, Figtree, Epilogue
中文字体叠加(必须):
展示字体与正文字体必须不同。禁止使用白名单以外的字体。
:root {
--color-primary: #...; /* 60% 背景/大面积 */
--color-secondary: #...; /* 30% 辅助/色块 */
--color-accent: #...; /* 10% 点缀/高亮 */
--color-text: #...;
--color-text-secondary: #...;
}
transform: rotate — 会破坏文档流.slide padding: 80px, card padding: 30px, item gap: 30px.slide padding: 50-60px, card padding: 18-20px, item gap: 18-20px.slide padding: 40-50px, card padding: 15px, item gap: 16pxheight: 60% 等百分比高度max-height: 85% 或让容器自适应内容.slide 设置 padding 预留边距,而非限制内容高度根据单页内容量自动调整字号和间距:
// 内容密度判断(在生成 HTML 前评估)
function getDensityLevel(content) {
const itemCount = content.要点数量 + content.表格行数;
if (itemCount <= 5) return 'standard'; // 标准密度
if (itemCount <= 10) return 'medium'; // 中等密度
return 'high'; // 高密度
}
// 字号与间距配置(必须同步调整)
const densityConfig = {
standard: {
// 字号(大)
h1: '4.5vw', h2: '2.5vw', h3: '1.8vw', p: '1.4vw',
// 间距(大)
slidePadding: '80px', contentGap: '40px', cardPadding: '30px',
itemGap: '30px', lineHeight: '1.6'
},
medium: {
// 字号(中小)- 精确校准以消除溢出
h1: '3.5vw', h2: '2.0vw', h3: '1.35vw', p: '0.95vw',
// 间距(紧凑但保持可读)- 为 9 项内容优化
slidePadding: '50px', contentGap: '24px', cardPadding: '16px',
itemGap: '16px', lineHeight: '1.45'
},
high: {
// 字号(小)
h1: '3.2vw', h2: '1.8vw', h3: '1.3vw', p: '0.9vw',
// 间距(小)
slidePadding: '40px', contentGap: '20px', cardPadding: '15px',
itemGap: '16px', lineHeight: '1.4'
},
};
应用示例(三级服务体系 - 9 项内容):
Medium 密度配置(精确校准,零溢出):
关键调整:每个参数微调 10-15%,累计节省约 40-50px 垂直空间
留白与字号平衡策略:
/* ✅ 最优:medium 密度精确配置(9 项内容零溢出) */
.slide {
padding: 50px; /* 保持适度留白 */
}
.level-items {
gap: 16px; /* 从 18px 减小,节省垂直空间 */
}
.level-item {
padding: 16px; /* 从 18px 减小,累计节省空间 */
}
.item-title {
font-size: 1.35vw; /* h3 标题微调 */
}
.item-desc {
font-size: 0.95vw; /* 从 1.0vw 微调,彻底消除溢出 */
line-height: 1.45; /* 从 1.5 微调,节省行间距 */
}
/* ⚠️ 次优:会有轻微溢出(10-15px) */
.slide {
padding: 50px;
}
.item-desc {
font-size: 1.0vw; /* ⚠️ 稍大,导致 10px 溢出 */
line-height: 1.5;
}
/* 结果:4个元素超出 10px */
/* ❌ 错误:留白过大 + 字号过大 = 严重溢出 */
.slide {
padding: 60px; /* ❌ 留白太大 */
}
.item-desc {
font-size: 1.1vw; /* ❌ 字号太大 */
}
/* 结果:底部内容被截断 44px! */
/* ❌ 错误:留白过小 = 拥挤感 */
.slide {
padding: 40px; /* ❌ 留白太小 */
}
.level-items {
gap: 10px; /* ❌ 过于密集 */
}
/* 结果:视觉窒息,没有呼吸感! */
关键原则:留白增加 → 字号必须减小,否则必定溢出
高度控制示例:
/* ❌ 错误:固定高度会截断内容 */
.framework-container {
height: 60%; /* 危险!内容可能被截断 */
}
/* ✅ 正确:自适应高度 */
.framework-container {
width: 100%;
max-height: 75%; /* 最大高度限制,但允许更小 */
display: flex;
gap: 40px;
/* 不设置固定 height,让内容自适应 */
}
/* ✅ 或者用 flex 布局自动分配空间 */
.slide {
padding: 60px; /* 通过 padding 控制边距 */
display: flex;
flex-direction: column;
}
.framework-container {
flex: 1; /* 占据剩余空间 */
min-height: 0; /* 允许收缩 */
}
/* ❌ 禁止内容区域出现滚动条!演示文稿必须一屏显示 */
.level-items {
overflow-y: auto; /* ❌ 错误!产生滚动条 */
}
/* ✅ 正确:让内容自动换行或收缩,而非滚动 */
.level-items {
flex: 1;
display: flex;
flex-direction: column;
gap: 24px;
/* 不设置 overflow-y: auto */
}
使用 Chart.js(从 cdnjs 加载):
overflow: hidden + position: relativestyle="height: 18vw; width: 100%"仅键盘左右箭头切换,禁止显示导航按钮。
JavaScript 中所有引号、尖括号必须保持原始字符,禁止 HTML 实体转义。
生成 HTML 后必须检查:
高度设置检查:
height: XX%max-height 或删除Overflow 检查:
.slide 必须保持 overflow: hidden(维持比例)overflow: visible 或 overflow: auto内容计数验证:
分栏布局注意:
所有单页生成完成后,使用系统内置工具 pptx_html2png 渲染:
# 调用内置工具(不需要安装 npm 依赖)
pptx_html2png(workDir='ppt/training') # 替换为实际子目录路径
工具会自动:
slide-*.html 文件slide-*.png告知用户:
✅ 已生成 N 张 PNG 图片
预览方式:
- 浏览器打开 ppt/training/slide-01-封面.html(编辑前预览)
- 图片查看器打开 ppt/training/slide-01-封面.png(最终效果)
如需调整:
- "第3页标题改为..." → 我直接修改 slide-03.html
- 修改后重新调用 pptx_html2png 渲染
渲染优势:
用户确认效果满意后,使用系统内置工具 pptx_png2pptx 组装:
# 调用内置工具(不需要安装 npm 依赖)
pptx_png2pptx(workDir='ppt/training') # 替换为实际子目录路径
工具会自动:
slide-*.png 文件演示文稿.pptx输出特点:
禁止行为:
npm install 或 bash 在工作目录安装依赖package.json, html2png.js, png2pptx.js 等脚本文件pptx_html2png 和 pptx_png2pptx 两个内置工具--- BID-PPT COMPLETE ---
输出目录: ppt/
输出文件: {ppt/slides.html, ppt/演示文稿.pptx}
幻灯片数: {N}
设计风格: {风格名称}
图表数: {N}
状态: SUCCESS
--- END ---
当由 bid-manager 调度(AUTO_MODE=true)时:
分析报告.md 和 响应文件/ 自动提取1. 封面(项目名称 + 公司名 + 日期)
2. 公司介绍(资质、案例、团队)
3. 对项目的理解(需求摘要)
4. 技术方案概述(架构图)
5. 实施方案(里程碑甘特图)
6. 项目团队(组织架构图)
7. 售后服务(响应时间、保障措施)
8. 报价摘要(总价 + 构成)
9. 优势总结(3个核心优势)
10. 致谢
1. 封面
2. 汇报提纲
3. 项目背景与目标
4. 工作进展(里程碑完成情况)
5. 关键成果(数据支撑)
6. 问题与风险
7. 下一步计划
8. 致谢/Q&A
1. 封面(姓名 + 职位 + 述职周期)
2. 工作概览(关键指标大数字)
3-6. 重点工作(每页一项,成果+数据)
7. 个人成长与学习
8. 下一年规划
9. 致谢
overflow-y: auto)在生成 HTML 后、调用 pptx_html2png 前,必须自检以下 5 点:
# 搜索危险的固定高度设置
grep -n "height: [0-9]*%" ppt/*/slide-*.html
✅ 期望结果:仅 .slide 容器有固定高度,内容容器不应有
❌ 如发现 .framework-container、.content-area 等内容容器有 height: 60%,必须修改为 flex: 1 或 max-height
# 搜索滚动条设置
grep -n "overflow-y: auto" ppt/*/slide-*.html
✅ 期望结果:无任何匹配(演示文稿禁止滚动条)
❌ 如发现任何 overflow-y: auto 或 overflow: auto(除了 body 标签),必须删除
对于 9 项内容的幻灯片:
对于 15+ 项内容的幻灯片:
# 检查 padding/gap 和字号是否平衡
grep -n "padding:\|gap:\|font-size:" ppt/*/slide-*.html | grep -E "(slide|item)"
对于 medium 密度(6-10 项内容),精确配置:
padding: 50px + p: 0.95vw + gap: 16px + card: 16px + line-height: 1.45padding: 50px + p: 1.0vw + gap: 18px → 溢出约 10pxpadding: 60px + p: 1.1vw → 溢出 44px+微调策略(针对 10px 级别的溢出):
p: 1.0vw → 0.95vw(节省约 15-20px)gap: 18px → 16px(每个 item 节省 2px,9个累计 18px)card: 18px → 16px(每个 card 节省 4px,9个累计 36px)line-height: 1.5 → 1.45(多行文本节省约 10-15px)目标: 溢出检测显示 "溢出 0px, 0 个元素被裁剪"
# 打开 HTML 文件,检查视觉平衡
file://path/to/slide-06-三级服务体系.html
✅ 期望结果(同时满足):
❌ 如发现问题,按优先级修复:
overflow-y: auto调试流程:
分析政府采购招标/磋商文件(PDF、Word、Excel),提取评分标准、技术需求、商务要求、资格条件、预算等关键信息, 生成结构化大纲和响应文件目录。支持多文件输入(招标公告+技术规范表+合同模板等)。 适用于竞争性磋商、公开招标、邀请招标等场景。 当用户提供招标文件/磋商文件/采购文件并要求分析、理解需求、提取评分标准、生成投标大纲时触发。
对招标文件分析报告进行逐项核实,与原始采购文件交叉验证每一个关键数据点。 检查分析报告中的金额、分值、资格条件、时间节点、评分规则等是否与原文一致, 识别幻觉数据、遗漏信息、数值错误。当用户要求核实/校验/审核分析报告时触发。
编写投标/响应文件的技术标部分。从分析报告中动态读取评分标准和技术需求, 按评分维度逆向设计章节结构,逐文件编写技术方案、技术服务响应表、培训方案等。 输出Markdown格式文件到 响应文件/ 目录。 当用户要求编写技术标、技术方案、技术响应文件时触发。 也支持修复模式:当用户要求修复/补充技术文件、处理质检反馈时触发。 前置条件:需已完成 bid-analysis 生成分析报告。
基于招标文件评分标准,生成投标可行性评估报告。 自动评估客观项(资质、业绩等),为主观项(技术方案、服务方案)生成打分表供用户评估。 帮助用户决策是否投标。 当用户要求评估投标可行性、分析中标概率、生成投标决策报告时触发。
为生成的Word投标文件创建占位符替换工具包。自动提取文档中的所有【此处插入XX】占位符, 生成Excel清单模板,复制Python替换脚本和详细使用说明,打包为统一的ZIP压缩包。 当用户要求"生成工具包"、"创建占位符工具"、"打包替换工具"时触发。 前置条件:响应文件/ 目录下已有生成完成的 Word 文档(.docx)。
将 响应文件/ 目录下的 Markdown 文件转换为格式化的 Word (.docx) 文档。 自动从分析报告和商务文件中读取项目名称、公司名称等信息, 通过命令行参数调用 generate_docx.js 脚本生成 Word 文件。 当用户要求生成Word文档、转换MD为docx、导出响应文件时触发。 前置条件:响应文件/ 目录下已有编写完成的 .md 文件。