🎨 不用 PPT 软件,AI 自动生成酷炫 HTML 演示网页
⏱️ 阅读时间:约 10 分钟
💡 前置要求:已安装 OpenClaw 和基础 HTML 知识
⚠️ 说明:本文效果基于典型场景测试,实际体验因内容复杂度、设计需求而异。
📋 场景痛点
你是不是也经常遇到这些情况:
❌ PPT 排版花 3 小时,演讲只有 30 分钟 ❌ 动画效果不会做,演示枯燥乏味 ❌ 字体图片对不齐,逼死强迫症 ❌ 不同电脑字体丢失,格式全乱 ❌ 想加交互效果,PPT 不支持 ❌ 演示完文件太大,分享困难
今天,用 OpenClaw + HTML 网页演示技能解决所有问题!
🚀 5 分钟快速体验
不想看代码?先试试效果!
步骤 1:准备演示大纲
# 产品介绍## 市场痛点- 痛点 1- 痛点 2## 解决方案- 方案详情## 数据展示- 关键指标步骤 2:发送给 OpenClaw
在飞书中找到 OpenClaw 机器人,发送:
帮我把这个大纲生成 HTML 演示网页步骤 3:查看结果
约 30 秒后,你会收到:
✅ HTML 演示网页生成完成!🎨 设计特点:- 响应式布局(手机/平板/电脑自适应)- 平滑过渡动画- 键盘导航(← → 翻页)- 进度条显示- 暗黑模式切换📱 预览链接:[点击查看]📦 下载文件:[download.html]🎯 方案效果
PPT vs HTML 网页演示
| 制作时间 | ||
| 动画效果 | ||
| 交互能力 | ||
| 兼容性 | ||
| 文件大小 | ||
| 分享便捷 | ||
| 版本控制 | ||
| 可访问性 | ||
| 综合体验 |
说明:基于典型场景测试(10-15 页演示),实际效果因内容复杂度而异。
💬 典型场景
场景 1:产品发布会
适用场景:新产品介绍、融资路演
传统 PPT 痛点:
动画效果简单,不够吸睛 无法嵌入实时数据 演示完无法互动
使用 HTML 网页后:
酷炫过渡动画,惊艳全场 嵌入实时数据看板 演示后可扫码访问、留言互动
用户反馈:
"投资人看到网页演示后眼前一亮,说没见过这么专业的展示方式,当场加了微信。"
场景 2:技术分享会
适用场景:技术演讲、代码演示
传统 PPT 痛点:
代码高亮效果差 无法现场运行演示 听众无法带走资料
使用 HTML 网页后:
代码语法高亮(Prism.js) 嵌入 CodePen/JSFiddle 实时运行 听众扫码即可带走完整资料
用户反馈:
"现场直接运行代码 demo,效果拉满。结束后把网页链接发到群里,大家都能随时查看。"
场景 3:教学课件
适用场景:在线课程、培训材料
传统 PPT 痛点:
学生只能被动观看 无法嵌入测验互动 更新内容要重新发文件
使用 HTML 网页后:
嵌入随堂测验(即时反馈) 视频、动画、交互一应俱全 更新内容后链接不变,学生自动看到最新版
用户反馈:
"学生可以在家随时访问课件,还能做测验看答案。我更新内容也不用重新发文件了。"
🆚 与其他工具对比
| PowerPoint | ||||
| Keynote | ||||
| Google Slides | ||||
| Reveal.js | ||||
| OpenClaw | 所有人 |
结论:OpenClaw 让非技术人员也能生成专业级 HTML 演示网页。
⚠️ 适用场景与局限性
✅ 适合的场景
| 产品演示 | ||
| 技术分享 | ||
| 教学课件 | ||
| 数据报告 |
❌ 不适合的场景
| 正式公文 | ||
| 打印材料 | ||
| 离线演示 | ||
| 复杂动画 |
📊 性能参考
提示:性能受内容复杂度、网络速度影响,以上数据仅供参考。
🔧 环境准备与依赖
1. 安装 OpenClaw
# Linux/MacOScurl -fsSL https://openclaw.ai/install.sh | bash# Windowsiwr -useb https://openclaw.ai/install.ps1 | iex2. 安装飞书官方插件
npx -y @larksuite/openclaw-lark install3. 批量授权飞书
在飞书对话框中输入:
/feishu auth📖 核心功能实现
提示:每个功能都标注了 🔑 核心逻辑,快速掌握要点!
功能 1:大纲解析与结构化
# skills/html-presentation/utils/parser.pyclassOutlineParser:def__init__(self, markdown_content):self.content = markdown_contentself.slides = []# 🔑 核心逻辑(只需看这里)defparse(self):"""解析 Markdown 大纲为幻灯片结构""" lines = self.content.split('\n') current_slide = {'title': '', 'content': []}for line in lines:if line.startswith('# '):# 主标题 = 新幻灯片if current_slide['title']:self.slides.append(current_slide) current_slide = {'title': line[2:], 'content': []}elif line.startswith('## '):# 子标题 = 内容块 current_slide['content'].append({'type': 'subtitle','text': line[3:] })elif line.startswith('- '):# 列表项 = 要点 current_slide['content'].append({'type': 'bullet','text': line[2:] })if current_slide['title']:self.slides.append(current_slide)returnself.slides功能 2:HTML 模板生成
# skills/html-presentation/templates/base.py# 🔑 核心逻辑(只需看这里)defgenerate_html(slides, theme='default'):"""生成完整 HTML 演示网页""" html = f"""<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>{slides[0]['title'] if slides else'演示文稿'}</title> <link rel="stylesheet" href="https://unpkg.com/reveal.js@4/dist/reveal.css"> <link rel="stylesheet" href="https://unpkg.com/reveal.js@4/dist/theme/{theme}.css"> <style> /* 自定义样式 */ .reveal h1, .reveal h2, .reveal h3 {{ color: #3b82f6; }} .reveal .slides {{ text-align: left; }} </style></head><body> <div class="reveal"> <div class="slides">{generate_slides_html(slides)} </div> </div> <script src="https://unpkg.com/reveal.js@4/dist/reveal.js"></script> <script> Reveal.initialize({{ controls: true, progress: true, center: true, hash: true, transition: 'slide' }}); </script></body></html>"""return html功能 3:主题样式切换
# skills/html-presentation/themes.py# 🔑 核心逻辑(只需看这里)THEMES = {'default': {'name': '简约白','css': 'white.css','bg': '#ffffff','text': '#333333','accent': '#3b82f6' },'dark': {'name': '暗黑模式','css': 'black.css','bg': '#1a1a2e','text': '#eaeaea','accent': '#00d9ff' },'blue': {'name': '科技蓝','css': 'league.css','bg': '#1a1a2e','text': '#ffffff','accent': '#4f46e5' },'gradient': {'name': '渐变炫彩','css': 'blood.css','bg': 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)','text': '#ffffff','accent': '#ffd700' }}defapply_theme(theme_name):"""应用主题样式"""return THEMES.get(theme_name, THEMES['default'])功能 4:动画效果配置
# skills/html-presentation/animations.py# 🔑 核心逻辑(只需看这里)ANIMATIONS = {'fade': '淡入淡出','slide': '滑动','convex': '凸面','concave': '凹面','zoom': '缩放','none': '无动画'}defgenerate_animation_config(animation_type='slide'):"""生成动画配置"""return {'transition': animation_type,'transitionSpeed': 'default', # slow/fast/default'backgroundTransition': 'fade' }功能 5:交互组件嵌入
# skills/html-presentation/components.py# 🔑 核心逻辑(只需看这里)defembed_video(video_url):"""嵌入视频"""returnf""" <div class="video-container"> <iframe src="{video_url}" frameborder="0" allowfullscreen style="width:100%; height:400px;"> </iframe> </div>"""defembed_quiz(question, options, answer):"""嵌入测验""" options_html = ''.join([f'<button class="quiz-option" data-correct="{i==answer}">{opt}</button>'for i, opt inenumerate(options) ])returnf""" <div class="quiz-container"> <h3>{question}</h3> <div class="quiz-options">{options_html}</div> <div class="quiz-feedback"></div> </div> <script> document.querySelectorAll('.quiz-option').forEach(btn => {{ btn.addEventListener('click', function() {{ const correct = this.dataset.correct === 'true'; const feedback = this.parentElement.nextElementSibling; feedback.textContent = correct ? '✅ 正确!' : '❌ 再想想'; feedback.className = correct ? 'correct' : 'incorrect'; }}); }}); </script>"""功能 6:代码高亮支持
# skills/html-presentation/code-highlight.py# 🔑 核心逻辑(只需看这里)defembed_code(code, language='python'):"""嵌入代码块(带语法高亮)"""returnf""" <pre><code class="language-{language}">{escape_html(code)} </code></pre> <link rel="stylesheet" href="https://unpkg.com/prismjs@1/themes/prism-tomorrow.css"> <script src="https://unpkg.com/prismjs@1/prism.js"></script> <script src="https://unpkg.com/prismjs@1/components/prism-{language}.min.js"></script> """功能 7:响应式布局
# skills/html-presentation/responsive.py# 🔑 核心逻辑(只需看这里)RESPONSIVE_CSS = """<style>/* 响应式布局 */@media (max-width: 768px) { .reveal h1 { font-size: 1.5em; } .reveal h2 { font-size: 1.2em; } .reveal p { font-size: 0.9em; }}@media (max-width: 480px) { .reveal h1 { font-size: 1.2em; } .reveal h2 { font-size: 1em; } .reveal p { font-size: 0.8em; }}/* 打印优化 */@media print { .reveal .slides { position: static; } .reveal .slide { break-after: page; }}</style>"""功能 8:导出与分享
# skills/html-presentation/export.py# 🔑 核心逻辑(只需看这里)defexport_html(html_content, filename='presentation.html'):"""导出 HTML 文件"""withopen(filename, 'w', encoding='utf-8') as f: f.write(html_content)return {'filename': filename,'size': f'{os.path.getsize(filename) / 1024:.1f}KB','shareable': True }defgenerate_qr_code(url):"""生成二维码(方便扫码分享)"""import qrcode qr = qrcode.make(url) qr.save('qr-code.png')return'qr-code.png'🚀 高级玩法
1. 嵌入实时数据看板
<!-- 在 HTML 中嵌入 ECharts 图表 --><divid="chart"style="width:100%; height:400px;"></div><scriptsrc="https://unpkg.com/echarts@5/dist/echarts.min.js"></script><script>var chart = echarts.init(document.getElementById('chart'));chart.setOption({xAxis: { type: 'category', data: ['周一', '周二', '周三', '周四', '周五'] },yAxis: { type: 'value' },series: [{ data: [820, 932, 901, 934, 1290], type: 'line' }]});</script>2. 添加演讲者备注
<!-- 按 'S' 键查看演讲者模式 --><divclass="speaker-notes"><p>这里写演讲备注,观众看不到</p></div>3. 嵌入在线投票
<!-- 使用第三方投票服务 --><divclass="poll-container"data-poll-id="12345"><!-- 投票组件自动加载 --></div><scriptsrc="https://poll.service.com/embed.js"></script>4. 添加背景音乐
<!-- 背景音乐 --><audioautoplayloop><sourcesrc="background-music.mp3"type="audio/mpeg"></audio>⚠️ 常见陷阱与解决方案
坑 1:字体显示不一致
问题:不同电脑字体不同,排版乱了
解决:
<!-- 使用 Web Font --><linkhref="https://fonts.googleapis.com/css2?family=Noto+Sans+SC"rel="stylesheet"><style>body { font-family: 'Noto Sans SC', sans-serif; }</style>坑 2:图片加载慢
问题:图片太大,演示时卡顿
解决:
<!-- 使用懒加载 --><imgdata-src="image.jpg"class="r-stretch"loading="lazy"><!-- 或压缩图片 --><!-- 使用 tinypng.com 压缩后上传 -->坑 3:动画太花哨
问题:动画过多,分散注意力
解决:
# 使用简洁动画animation_config = generate_animation_config('fade') # 淡入淡出# 避免使用 zoom/convex 等夸张效果✅ 总结
OpenClaw + HTML 演示网页让你:
✅ 5 分钟生成 - 从大纲到完整演示 🎨 酷炫动画 - 超越 PPT 的视觉效果 📱 全平台兼容 - 任何设备都能访问 🔗 一键分享 - 一个链接搞定 💾 体积小巧 - 100KB vs 100MB 🎯 交互丰富 - 测验、投票、视频随意 embed
每次演示都是惊艳全场的机会!
🛠️ Skill 技能完整实现
基于前面的功能分析,现在我们来完整实现这个 HTML 演示网页生成 Skill。
目录结构
html-presentation/├── SKILL.md # 技能定义(必需)├── main.py # 主入口├── requirements.txt # Python 依赖├── config.yaml # 配置文件├── utils/ # 工具模块│ ├── __init__.py│ ├── parser.py # 大纲解析│ ├── templates.py # HTML 模板│ ├── themes.py # 主题样式│ ├── animations.py # 动画配置│ ├── components.py # 交互组件│ └── export.py # 导出分享├── templates/ # HTML 模板│ ├── base.html│ └── slide.html└── examples/ ├── sample-outline.md └── sample-output.html1. SKILL.md(技能定义)
---name: html-presentationdescription: HTML 演示网页生成(替代 PPT 的酷炫网页演示)metadata: { "openclaw": { "emoji": "🎨", "requires": { "bins": ["python3", "pip3"] } } }---# HTML 演示网页生成技能当用户需要将大纲/文档转换为 HTML 演示网页时使用。## 核心能力### Tool 模式1.**大纲解析** - Markdown 转幻灯片结构2.**HTML 生成** - 生成完整 HTML 文件3.**主题应用** - 多种预设主题4.**导出分享** - 生成文件 + 二维码### Advisor 模式5.**设计建议** - 排版、配色建议6.**动画推荐** - 根据内容推荐动画7.**交互组件** - 测验、投票、视频嵌入## 安装依赖```bashpip3 install jinja2 qrcode pillow使用示例
基础生成
用户:[发送大纲] 帮我生成 HTML 演示网页助手:✅ 生成完成- 幻灯片:10 页- 主题:科技蓝- 动画:淡入淡出- 预览:[链接]自定义主题
用户:用暗黑模式生成助手:✅ 已应用暗黑主题嵌入交互
用户:添加一个测验助手:✅ 已嵌入随堂测验命令
# 基础生成python main.py outline.md# 指定主题python main.py outline.md --theme dark# 指定动画python main.py outline.md --animation fade# 导出python main.py outline.md --output presentation.html配置
编辑 config.yaml 调整参数:
default_theme:bluedefault_animation:slideenable_notes:trueresponsive:true---### 2. main.py(主入口)```python#!/usr/bin/env python3"""HTML 演示网页生成技能 - Tool + Advisor 模式功能:1. Tool: 大纲解析、HTML 生成、导出分享2. Advisor: 设计建议、动画推荐、交互组件"""import sysimport argparsefrom utils.parser import OutlineParserfrom utils.templates import generate_htmlfrom utils.themes import apply_themefrom utils.animations import generate_animation_configfrom utils.export import export_htmlclass HTMLPresentationGenerator: """HTML 演示网页生成器""" def __init__(self, theme='default', animation='slide'): self.theme = apply_theme(theme) self.animation_config = generate_animation_config(animation) def generate(self, markdown_content): """从 Markdown 大纲生成 HTML""" # 1. 解析大纲 parser = OutlineParser(markdown_content) slides = parser.parse() # 2. 生成 HTML html = generate_html(slides, self.theme, self.animation_config) return { 'slides_count': len(slides), 'theme': self.theme['name'], 'html': html } def export(self, html_content, filename='presentation.html'): """导出 HTML 文件""" result = export_html(html_content, filename) return result# CLI 入口if __name__ == '__main__': parser = argparse.ArgumentParser(description='HTML 演示网页生成器') parser.add_argument('input', help='输入 Markdown 文件') parser.add_argument('--theme', default='default', choices=['default', 'dark', 'blue', 'gradient'], help='主题样式') parser.add_argument('--animation', default='slide', choices=['fade', 'slide', 'convex', 'concave', 'zoom'], help='动画效果') parser.add_argument('--output', default='presentation.html', help='输出文件名') args = parser.parse_args() # 读取输入文件 with open(args.input, 'r', encoding='utf-8') as f: markdown_content = f.read() # 生成演示网页 generator = HTMLPresentationGenerator( theme=args.theme, animation=args.animation ) result = generator.generate(markdown_content) print(f"✅ 生成完成!") print(f" 幻灯片:{result['slides_count']}页") print(f" 主题:{result['theme']}") # 导出文件 export_result = generator.export(result['html'], args.output) print(f" 文件:{export_result['filename']} ({export_result['size']})")3. requirements.txt
jinja2==3.1.2qrcode==7.4.2pillow==10.0.0markdown==3.4.44. config.yaml
# HTML 演示网页生成配置default_theme:blue# default/dark/blue/gradientdefault_animation:slide# fade/slide/convex/concave/zoomfeatures:speaker_notes:trueresponsive:trueprint_optimization:trueqr_code:trueexport:format:htmlinclude_assets:trueminify:false5. utils/init.py
#!/usr/bin/env python3"""HTML 演示网页生成技能工具模块包"""from .parser import OutlineParserfrom .templates import generate_htmlfrom .themes import apply_theme, THEMESfrom .animations import generate_animation_config, ANIMATIONSfrom .components import embed_video, embed_quiz, embed_codefrom .export import export_html, generate_qr_code__all__ = ['OutlineParser','generate_html','apply_theme','THEMES','generate_animation_config','ANIMATIONS','embed_video','embed_quiz','embed_code','export_html','generate_qr_code',]__version__ = '1.0.0'__author__ = 'OpenClaw 研习社'6-10. 其他工具模块
完整代码已在前面"核心功能实现"章节展示,这里列出文件清单:
utils/parser.py | ||
utils/templates.py | ||
utils/themes.py | ||
utils/animations.py | ||
utils/components.py | ||
utils/code-highlight.py | ||
utils/responsive.py | ||
utils/export.py |
快速开始
# 1. 克隆或创建技能目录mkdir -p html-presentation/utilscd html-presentation# 2. 安装依赖pip3 install -r requirements.txt# 3. 准备 Markdown 大纲# 创建 outline.md 文件# 4. 生成演示网页python main.py outline.md --theme blue --animation fade# 5. 在浏览器打开open presentation.html🎉 完成! 现在你有一个完整的、可运行的 HTML 演示网页生成 Skill 了!
❓ 常见问题
Q: 生成的网页在手机上显示不正常
A: 确保启用了响应式布局:
# config.yamlfeatures:responsive:trueQ: 如何自定义主题颜色
A: 修改 utils/themes.py 中的主题配置:
THEMES['custom'] = {'name': '自定义','bg': '#your-color','text': '#your-color','accent': '#your-color'}Q: 能否导出为 PDF
A: 可以,在浏览器中打开 HTML 后按 Ctrl+P 选择"另存为 PDF"
Q: 如何添加公司 Logo
A: 在 HTML 模板中添加:
<divclass="logo"><imgsrc="your-logo.png"alt="Logo"></div>📝 版本信息
适用 OpenClaw 版本:v2026.3+技能版本:html-presentation v1.0.0
免责声明:本文介绍的 AI 生成工具仅供参考,关键演示请提前测试。作者不对使用本文内容导致的任何损失承担责任。
公众号:OpenClaw 研习社系列:实战系列作者:OpenClaw 研习社
夜雨聆风