为 NetLab 网络实验平台制作配套教学课件,从规划到落地共产出 6 份 PPT。本文分享完整的课件制作流程:规划思路、设计原则、工具链选择、踩坑经验,以及课件与实验联动的设计方法。

一、课件规划

NetLab 目前有 6 个核心实验模块,每份课件对应一个实验,形成"理论→实操"闭环。规划阶段先确定 6 份课件的对应关系:

序号课件主题对应实验核心知识点
1网络基础网络基础认知实验OSI模型、TCP/IP、IP地址
2VLAN配置VLAN划分与互通实验VLAN原理、Access/Trunk、VLAN间路由
3路由配置静态路由与OSPF实验路由表、静态路由、OSPF邻接
4DHCP与NATDHCP分配与NAT转换实验DHCP池、SNAT/DNAT、Easy IP
5防火墙策略防火墙安全策略实验安全域、策略规则、放行/拒绝
6综合组网企业综合组网实战全链路整合、故障排查
💡
规划要点:课件与实验一一对应,学生在课堂学理论后立即上手实验,知识留存率显著提升。6份课件按难度递进排列,前5份单模块训练,第6份综合实战。

二、设计原则

6份课件采用统一的视觉系统,确保系列感与专业度:

  • 主色调:NetLab 品牌蓝 #0052FF,用于标题、强调元素、封面背景
  • 封面页:深色背景(#1A1A2E)+ 蓝色标题,营造科技感
  • 内容页:浅色背景(#FFFFFF)+ 深色文字,保证可读性
  • 页数控制:每份 11 页精简版,避免信息过载
  • 图标体系:统一使用线性图标风格,每页配一个核心图标
⚠️
页数不是越多越好:教学课件的核心是"讲清楚一个点",而非堆砌信息。11页的结构刚好覆盖一个45分钟课时:5分钟导入 + 30分钟讲解 + 10分钟互动。

三、PPT结构模板

6份课件统一采用以下 11 页结构模板:

第1页  → 封面(深色背景 + 课题名 + 讲师信息)
第2页  → 学习目标(3-5条,用动词开头:掌握/理解/能够)
第3页  → 知识点1(核心概念 + 图示)
第4页  → 知识点2(原理详解 + 流程图)
第5页  → 知识点3(配置命令 + 代码块)
第6页  → 知识点4(进阶内容或对比表格)
第7页  → 知识点5(典型场景或案例分析)
第8页  → 知识点6(常见错误或注意事项)
第9页  → 实验对照(NetLab实验截图 + 操作指引)
第10页 → 思考题(2-3道开放性问题)
第11页 → 小结(要点回顾 + 下节预告)

这个模板的优势在于节奏感:前2页建立预期,中间6页递进讲解,第9页衔接实操,最后2页巩固反思。

四、工具链选择

课件制作采用 PptxGenJS + python-pptx 双工具链:PptxGenJS 负责快速生成初版,python-pptx 负责精细修改。

4.1 PptxGenJS 生成初版

const pptx = new PptxGenJS();

// 封面页 - 深色背景 + 蓝色标题
const cover = pptx.addSlide();
cover.background = { color: "1A1A2E" };
cover.addText("VLAN配置", {
    x: 1.0, y: 2.0, w: 8.0, h: 1.5,
    fontSize: 44, color: "0052FF", bold: true,
    fontFace: "Microsoft YaHei"
});
cover.addText("NetLab网络实验配套课件", {
    x: 1.0, y: 3.5, w: 8.0, h: 0.8,
    fontSize: 20, color: "CCCCCC",
    fontFace: "Microsoft YaHei"
});

// 内容页 - 浅色背景
const content = pptx.addSlide();
content.background = { color: "FFFFFF" };
content.addText("VLAN原理", {
    x: 0.5, y: 0.3, w: 9.0, h: 0.8,
    fontSize: 32, color: "0052FF", bold: true,
    fontFace: "Microsoft YaHei"
});

pptx.writeFile({ fileName: "vlan-config.pptx" });

4.2 python-pptx 精细修改

from pptx import Presentation
from pptx.util import Pt

prs = Presentation("vlan-config.pptx")

for slide in prs.slides:
    for shape in slide.shapes:
        if shape.has_text_frame:
            for para in shape.text_frame.paragraphs:
                for run in para.runs:
                    # 统一字体为微软雅黑
                    run.font.name = "Microsoft YaHei"
                    run.font.size = Pt(run.font.size.pt if run.font.size else 18)

prs.save("vlan-config-final.pptx")
💡
为什么用两个工具?PptxGenJS 用代码生成 PPT 速度快、可批量、可版本控制;python-pptx 修改已有 PPT 的字体和细节更灵活。两者互补,先生成再微调。

4.3 踩坑经验

  • PptxGenJS 字体不生效:生成的 PPT 在 PowerPoint 中打开,字体被替换为默认 Calibri。原因是 PptxGenJS 的 fontFace 属性需要精确匹配系统已安装字体名。
  • python-pptx 中文字体丢失:直接设置 run.font.name 只改拉丁字体,中文字体需额外设置 run.font._rPr 的 ea 属性。
  • 深色封面文字颜色不生效:PptxGenJS 的 color 参数不带 # 前缀,写 "#0052FF" 会报错,正确写法是 "0052FF"。

五、课件与实验联动

每份课件的第9页是"实验对照页",嵌入对应 NetLab 实验的截图和操作指引,形成课件→实验的导航闭环。

// 第9页 - 实验对照页
const expSlide = pptx.addSlide();
expSlide.background = { color: "FFFFFF" };

// 左侧:NetLab实验截图
expSlide.addImage({
    path: "images/vlan-lab-screenshot.png",
    x: 0.5, y: 1.5, w: 5.0, h: 3.5
});

// 右侧:操作指引
expSlide.addText("实验操作指引", {
    x: 6.0, y: 1.5, w: 3.5, h: 0.6,
    fontSize: 24, color: "0052FF", bold: true
});
expSlide.addText([
    { text: "1. 打开 NetLab → 选择 VLAN实验\n", options: { fontSize: 16 } },
    { text: "2. 按课件拓扑连接设备\n", options: { fontSize: 16 } },
    { text: "3. 执行配置命令验证结果\n", options: { fontSize: 16 } },
    { text: "4. 截图保存实验记录", options: { fontSize: 16 } }
], {
    x: 6.0, y: 2.2, w: 3.5, h: 2.8,
    color: "333333", fontFace: "Microsoft YaHei"
});
💡
联动设计的关键:实验对照页不只是放截图,还要给出明确的操作步骤。学生在课堂上学完理论,翻到第9页就知道"接下来在NetLab里做什么",降低实验上手门槛。

六、字体统一经验

6份课件最终统一使用微软雅黑作为全站字体。字体统一过程经历了三个阶段:

  1. 初始状态:PptxGenJS 默认生成 Calibri 字体,中文显示为宋体回退,视觉效果不统一。
  2. 第一次尝试:在 PptxGenJS 中设置 fontFace: "Microsoft YaHei",但部分文本框字体仍被 PowerPoint 替换。
  3. 最终方案:用 python-pptx 遍历所有 slide 的所有 run,强制设置中英文字体为微软雅黑。
# python-pptx 统一字体 - 完整版
from pptx import Presentation
from pptx.oxml.ns import qn

prs = Presentation("input.pptx")

for slide in prs.slides:
    for shape in slide.shapes:
        if shape.has_text_frame:
            for para in shape.text_frame.paragraphs:
                for run in para.runs:
                    # 设置拉丁字体
                    run.font.name = "Microsoft YaHei"
                    # 设置东亚字体(中文)
                    rPr = run._r.get_or_add_rPr()
                    ea = rPr.find(qn('a:ea'))
                    if ea is None:
                        ea = rPr.makeelement(qn('a:ea'), {})
                        rPr.append(ea)
                    ea.set('typeface', 'Microsoft YaHei')

prs.save("output-unified-font.pptx")
⚠️
Consolas → 微软雅黑的替换:代码块原本用 Consolas 等宽字体,但在教学场景中学生更关注命令内容而非格式对齐,统一改为微软雅黑后可读性反而更好。如需保留等宽效果,可用微软雅黑 + 加粗模拟。

七、小结与展望

  • 9份课件与9个实验一一对应,形成"理论→实操"闭环教学体系
  • 统一视觉系统(NetLab蓝 #0052FF、深色封面+浅色内容、11页精简版)保证系列感
  • PptxGenJS + python-pptx 双工具链:前者快速生成,后者精细微调
  • 第9页实验对照页是课件与实验联动的核心枢纽
  • 字体统一用 python-pptx 遍历设置中英文字体,解决 PptxGenJS 字体不生效问题

后续计划:将课件导出为 PDF 配合 NetLab 实验指导书在线发布,同时探索 ArkTS 版交互式课件,让学生在 HarmonyOS 设备上也能学习。