把代码执行演示嵌在你的PPT中

python-pptx库处理ppt代码示例 幻灯片模板及占位符的概念什么是版式我们在新增一页幻灯片的时候,会提示我们选择版式。pptx库中的列表数量和power point基础版式数量对应,格式对应。比如6为空模版,7为左侧图形,右侧文本的版式。传入0表示是第一个版式,传入1表示第二个版式,以此类推一直到结束48。 阅读详情
AI摘要

本文介绍了如何将代码执行嵌入到PPT中,以实现更流畅的技术分享。关键技术和工具包括Microsoft PowerPoint、Glot Code Runner和Docker。通过在PowerPoint中嵌入Webview插件展示HTTPS的Web页面,结合Glot的代码运行功能,利用Docker创建一个可以运行不同代码的Web应用。文章详细讲述了从搭建环境到实现代码运行的全过程,展示了如何将代码演示变得酷炫且高效。

“Talk is cheap, show me your code!”

当一个程序员在做技术分享的时候, 代码演示经常是不可或缺的一个环节。然而在你的演示PPT和代码运行之间切换是一件非常恼人事情,而且非常影响演示的节奏和流畅性。要做一个完美的技术分享,能不能把代码的运行嵌入到PPT中呢?

当然可以,我前不久在公司内部分享了一起关于Python的小谜题,大家可以到斗鱼去观看这次分享的视频录播 (很糟糕的是在36分钟后,摄像头偏移了,拍了大半天挂钟)

为了实现代码嵌入ppt,我用到的关键技术包括:

首先,演示常用的是微软的PowerPoint(至于苹果的Keynote,我暂时还没有找到解决方案),所以你需要安装PowerPoint,在最新的Office套件中,微软提供了一个Webview的插件,有了这个插件,可以直接把一个Web页面,嵌入到Office文档中,自然也就包含了PPT。

注意,为了安全性的考虑,嵌入的web页面必须是https的。

好了有了这个,我们就可以把一个代码运行的web页面直接嵌入到演示文档中,剩下的事情,就是做一个可以运行不同代码的Web应用了。

Glot 是一个开源的在线代码运行平台。其架构如下图所示。

利用Glot的代码运行的核心功能,我们就可以很方便的开发一个可以运行各种代码的web应用。

利用容器,我们可以把整个应用分为以下的几个层次:

  • Base
    提供基本的代码运行的环境,包含了代码执行的必要的解释器和编译器。在本次演示中,我使用了golang:latest,但是碰巧的是这个镜像是拥有Python的解释器的,我的代码演示都是python,省去了我安装Python的步骤。如果是别的不同的语言的演示,注意安装对应的环境。
  • Code Runner https://github.com/gangtao/code_runner
    我的Code Runner是对Glot的Code Runner的一个增强,该项目提供一个运行代码的服务。
    项目的Dockerfile:
    FROM golang:latest
    
    MAINTAINER gangtao@outlook.com
    
    ENV GOPATH=/home/glot
    ENV GOROOT=/usr/local/go
    
    # Add user
    RUN groupadd glot
    RUN useradd -m -d /home/glot -g glot -s /bin/bash glot
    
    # Copy files
    Add ./build/release/server /home/glot/
    # Add ./vendor/. /home/glot/src
    
    USER glot
    WORKDIR /home/glot/
    
    # generate certificate
    RUN go run $GOROOT/src/crypto/tls/generate_cert.go --host localhost
    
    EXPOSE 8080
    
    # CMD ["/home/glot/runner"]
    ENTRYPOINT ["/home/glot/server"]
    通过Dockerfile我们可以看出该项目主要的内容:利用Glot实现代码运行,产生证书用于https,利用echo实现web 服务。
    Web服务的代码如下:
    package code_runner
    
    import (
    	"fmt"
    	"github.com/prasmussen/glot-code-runner/cmd"
    	"github.com/prasmussen/glot-code-runner/language"
    	"io/ioutil"
    	"os"
    	"path/filepath"
    )
    
    type Payload struct {
    	Language string          `json:"language"`
    	Files    []*InMemoryFile `json:"files"`
    	Stdin    string          `json:"stdin"`
    	Command  string          `json:"command"`
    }
    
    type InMemoryFile struct {
    	Name    string `json:"name"`
    	Content string `json:"content"`
    }
    
    type Result struct {
    	Stdout string `json:"stdout"`
    	Stderr string `json:"stderr"`
    	Error  string `json:"error"`
    }
    
    func Run(payload *Payload) *Result {
    	// Ensure that we have at least one file
    	if len(payload.Files) == 0 {
    		exitF("No files given\n")
    	}
    
    	// Check if we support given language
    	if !language.IsSupported(payload.Language) {
    		exitF("Language '%s' is not supported\n", payload.Language)
    	}
    
    	// Write files to disk
    	filepaths, err := writeFiles(payload.Files)
    	if err != nil {
    		exitF("Failed to write file to disk (%s)", err.Error())
    	}
    
    	var stdout, stderr string
    
    	// Execute the given command or run the code with
    	// the language runner if no command is given
    	if payload.Command == "" {
    		stdout, stderr, err = language.Run(payload.Language, filepaths, payload.Stdin)
    	} else {
    		workDir := filepath.Dir(filepaths[0])
    		stdout, stderr, err = cmd.RunBashStdin(workDir, payload.Command, payload.Stdin)
    	}
    
    	result := &Result{
    		Stdout: stdout,
    		Stderr: stderr,
    		Error:  errToStr(err),
    	}
    
    	return result
    }
    
    // Writes files to disk, returns list of absolute filepaths
    func writeFiles(files []*InMemoryFile) ([]string, error) {
    	// Create temp dir
    	tmpPath, err := ioutil.TempDir("", "")
    	if err != nil {
    		return nil, err
    	}
    
    	paths := make([]string, len(files), len(files))
    	for i, file := range files {
    		path, err := writeFile(tmpPath, file)
    		if err != nil {
    			return nil, err
    		}
    
    		paths[i] = path
    
    	}
    	return paths, nil
    }
    
    // Writes a single file to disk
    func writeFile(basePath string, file *InMemoryFile) (string, error) {
    	// Get absolute path to file inside basePath
    	absPath := filepath.Join(basePath, file.Name)
    
    	// Create all parent dirs
    	err := os.MkdirAll(filepath.Dir(absPath), 0775)
    	if err != nil {
    		return "", err
    	}
    
    	// Write file to disk
    	err = ioutil.WriteFile(absPath, []byte(file.Content), 0664)
    	if err != nil {
    		return "", err
    	}
    
    	// Return absolute path to file
    	return absPath, nil
    }
    
    func exitF(format string, a ...interface{}) {
    	fmt.Fprintf(os.Stderr, format, a...)
    	os.Exit(1)
    }
    
    func errToStr(err error) string {
    	if err != nil {
    		return err.Error()
    	}
    
    	return ""
    }

    可以通过容器方便的启动该服务,然后就可以通过Rest请求,执行Python(Golang)的代码。
  • curl \
      -X POST \
      http://localhost:8080/run \
      -H 'Content-Type: application/json' \
      -d '{"language":"python","files":[{"name":"main.py","content":"print(42)"}]}'
    
    {"stdout":"42\n","stderr":"","error":""}

    在这个项目中,我用了echo来实现一个轻量级的Web服务,而没有使用Glot自带的基于Ruby的服务,这样做的好处是技术栈的统一,因为echo和glot的核心都是用的Golang。

  • Code Runner Web https://github.com/gangtao/code_runner_web
    有了服务,下面就是前端的UI了。
    UI使用了codemirror来做编辑器。Dockerfile如下:
    FROM naughtytao/code_runner
    
    MAINTAINER gangtao@outlook.com
    
    Add ./static /home/glot/static

    运行Code Runner Web后,就可以在以下的web界面中输入你想要运行的结果,并实时的显示想要运行的结果了。

好了,剩下的还有一些事情要做,就是准备你的演示代码,大家可以参考这个项目,这里缺省是将所有的代码片段放在code/python/ 目录下。运行:http://localhost:8080/#2 就会加载第二个代码片段。

这个是嵌入后的效果:

好了,是不是很Coooooool呢?

另外利用容器来构建应用真的非常非常方便。

jupyter notebook黑科技——制作PPT式的演示文稿 看到[译]27 个Jupyter Notebook的小提示与技巧一文以后,顿感开启了新世界的大门,发现了原来Jupyter notebook中有这么多黑科技! 本文就要分享其中的一个很酷的小技巧——制作演示文稿。原文中只有简单提及,我将比较仔细地介绍其用法。 首先来体验一下它的效果,我为我的一篇博客更少标注的机器学习方法——主动学习(python示例)创建的实例: 这个库叫RISE,能够把我们的... 阅读详情

相关推荐

解锁Slidev隐藏玩法:除了写PPT,还能做交互式演示、代码直播和教学课件

本文深入探讨Slidev的隐藏玩法,从静态PPT到交互式演示、代码直播和教学课件的全面升级。Slidev作为基于Markdown和Vue的演示框架,支持实时编码、动态公式和交互式组件,极大提升了技术演示的效率和体验。适合开发者、技术布道师和教育工作者使用。

weixin_30219613的博客 233

如何在ppt中放代码,使用滚动条效果最佳

如何非常漂亮的将代码放入ppt,你懂得,就是这么给力。

百世经纶『一页書』 1万+

web安全---RCE(远程命令/代码执行)原理及DVWA漏洞演示

简介 RCE为两种漏洞的缩写,分别是"远程命令/代码执行",攻击者可以远程命令注入系统命令或者代码,从而拿下目标服务器 RCE 漏洞形成 远程系统命令执行(简称命令注入)是一种注入漏洞。攻击者构造payloads让受害者操作系统执行该命令。当Web应用程序代码包含操作系统调用并且调用中使用了用户输入时,才可能进行OS命令注入攻击。这时候,用户提交的系统命令会直接在服务器中执行,并返回。命令注入漏洞可能会出现在所有让你调用系统外壳命令的语言,如c,python,php等。 注:命令注入并..

qq_46217803的博客 5052

页面 动态显示cmd执行结果_把代码执行演示嵌在你的PPT中

“Talk is cheap, show me your code!”当一个程序员在做技术分享的时候, 代码演示经常是不可或缺的一个环节。然而在你的演示PPT和代码运行之间切换是一件非常恼人事情,而且非常影响演示的节奏和流畅性。要做一个完美的技术分享,能不能把代码的运行嵌入到PPT中呢?当然可以,我前不久(几年前把 )在公司内部分享了一起关于Python的小谜题,大家可以到斗鱼去观看这次分享的视频...

weixin_39897015的博客 2167

PPT文件插入编程方法详解

下面是一个示例代码,演示了如何使用VBA在PPT中插入其他文件。接下来,我们创建了一个新的幻灯片,并设置了待插入文件的路径。通过使用VBA,我们可以打开PPT文件,创建幻灯片,并将其他文件插入到幻灯片中。PPT文件是一种常用的演示文稿格式,其中插入其他文件的功能能够增加演示的丰富性和多样性。通过运行上述代码,你可以实现将指定的文件插入到PPT文件中的功能。最后,我们保存了PPT文件,关闭了PPT文档,退出了PPT应用程序,并释放了对象引用。首先,我们需要打开一个PPT文件,并创建一个新的幻灯片。

2301_79331387的博客 2205

PPT如何通过编程插入文本?

在Microsoft PowerPoint中,我们可以使用编程语言(如Python)来自动化插入文本到幻灯片中。这是一个基本的示例,你可以根据需要进行修改和扩展。通过使用Python PPTX库,你可以在幻灯片中插入不同样式和格式的文本,以及添加其他元素,如图像、表格等。类,然后创建一个新的幻灯片,并选择一个幻灯片布局。在这个示例中,我们选择了第6个布局,它是一个空白幻灯片布局。安装完成后,我们可以编写Python代码来创建一个幻灯片和插入文本。访问文本框的文本帧,并使用赋值语句将文本插入到文本帧中。

CyberXZ的博客 556

利用 ChatGPT 编写 PowerPoint 宏代码并应用到 PPT 中

即使是零基础的初学者,也能轻松掌握宏的使用方法,提高工作效率。1. 在 VBA 编辑器中,点击**“运行”**→ “运行子过程/用户窗体”(快捷键:F5)。2. 在左侧选择**“自定义功能区”,在右侧勾选“开发工具”,点击“确定”**。2. 点击**“Visual Basic”**按钮,打开 VBA 编辑器。1. 在 PowerPoint 界面,点击**“开发工具”**选项卡。1. 打开 PowerPoint,点击**“文件”**→ “选项”。1. 在 VBA 编辑器中,点击**“插入”**→ “模块”。

2501_91109175的博客 1385

PowerPoint文本提取神器:PPT转Word/纯文本文档

除了使用现成的转换工具外,还可以通过编程自定义忽略规则和脚本。例如,可以使用Python的库来读取PPT文件,并编写脚本过滤掉图像、图表等非文本内容。然后,将清理后的文本部分提取出来并转换为所需格式。代码示例如下:import re# 过滤掉非文本元素的文本该脚本逐个读取PPT中的幻灯片,并提取出文本内容。re.match用于过滤掉可能代表图片等非文本内容的空白字符。

weixin_36431145的博客 1386

简单的PPT计时插件:轻松管理演讲时间,提升演示效果

简单的PPT计时插件:轻松管理演讲时间,提升演示效果 【下载地址】简单的PPT计时插件 这款简单的PPT计时插件专为演示者设计,帮助您在演讲过程中轻松掌握时间。插件界面简洁,操作直观,无需复杂设置即可使用。计时器始终悬浮在PPT界面上,既不影响演示效果,又能让您随时查看剩余时间。无论是会议、课堂还是其他场合,这款插件都能...

gitblog_06769的博客 644

从零开始:用Python实现AlphaZero五子棋AI(附完整代码)

本文详细介绍了如何从零开始使用Python实现AlphaZero五子棋AI。通过工程化实践,逐步构建蒙特卡洛树搜索(MCTS)、轻量化残差网络(ResNet)以及自博弈训练循环,并提供完整可运行的代码。文章旨在帮助开发者绕过复杂理论,聚焦实战,最终打造一个能够自我学习与对弈的智能体,是深度强化学习在游戏AI领域的一次完整项目实战。

weixin_29081703的博客 416

倍福TC3 PLC高速采集实战:如何用PLC-Recorder实现0.24ms级时间戳同步

本文详细介绍了倍福TC3 PLC与PLC-Recorder实现0.24ms级时间戳同步的工程实践方案。通过硬件拓扑设计、时间源选择优化、报文结构封装及同步验证方法,为工业自动化领域的高精度数据采集提供了可靠解决方案,特别适用于精密装配、激光切割等微秒级同步要求的场景。

weixin_29193359的博客 374

presenterm高级功能:自定义代码执行与演示

你是否还在为终端演示中代码无法实时执行而烦恼?是否需要反复切换窗口才能展示代码运行效果?presenterm作为一款功能强大的终端幻灯片工具(terminal slideshow tool),提供了卓越的代码执行与演示能力,让你在演示过程中实时运行代码并展示结果,极大增强技术分享的互动性与说服力。本文将深入解析presenterm的代码执行机制,从基础配置到高级自定义,全方位展示如何打造专业级代码...

gitblog_00067的博客 1067

【车载开发系列】ParaSoft单元测试环境配置(一)

bdf是数据文件的一种类型,表示一种数据库文件。在ParaSoft当中,可以使用bdf文件来快速创建一个测试项目。

千月星跡 2148

如何利用Python-pptx 库和gpt 大模型来自动化生成 PowerPoint 演示文稿

如何利用Python-pptx 库和 gpt大型语言模型来自动化生成 PowerPoint 演示文稿

qq_25891151的博客 1470

3D数学-动力学

3D数学-11-动力学 旋转运动学 二维旋转动力学 首先我们考虑最简单的情况: 我们将F施加在圆盘(忽略质量)上的一个点(质量为m)上 图中:F为我们施加的力,O是枢轴原点。 通过基本的运算,我们可以得到 F'= F*sinθ 那么切向加速度 a = F'/ m 切向加速度是线性速度的加速度,我们通过除以半径获得角加速度 α = a / r 现在,我们换一种方式,那就是通过杠杆臂的方式去施加力 为了能够计算出m点的角加速度,我们需要引入一个概念:扭矩 他的理解类似于力矩,公式如下 τ = Flsi

韩天衣的博客 2287

别再只接个放大器了!压电传感器测量电路(电压/电荷放大器)的5个实战配置要点

本文深入解析压电传感器测量电路中的5个关键实战配置要点,包括电缆长度选择、输入阻抗匹配、过载保护设计、低频噪声抑制及放大器选型策略。特别针对电压放大器和电荷放大器的应用场景差异提供工程实践建议,帮助工程师有效解决信号失真、噪声干扰等常见问题,提升测量精度和系统可靠性。

weixin_26869081的博客 302

AI+代码执行:自动化生成技术PPT的工程实践指南

在技术文档与演示文稿制作领域,自动化流程正成为提升效率的关键路径。其核心原理在于将自然语言处理与代码生成能力相结合,通过结构化解析与可视化转换,实现从文本到视觉呈现的自动化映射。这一技术方案的价值在于将内容创作者从重复性排版、图表绘制工作中解放,聚焦于核心逻辑与深度思考。典型应用场景包括技术分享、项目汇报、学术交流等需要快速产出结构化演示材料的场合。本文以“GPT-5.6”和“Codex”作为AI文本生成与代码生成能力的代称,详细阐述了如何通过Prompt工程、python-pptx库调用、安全沙箱执行等工

weixin_30606461的博客 370

Windows+VSCode+Cline+MCP全流程配置指南

本文提供了一份详细的Windows+VSCode+Cline+MCP全流程配置指南,旨在帮助开发者打造高效的AI辅助编码工作站。文章从环境准备讲起,逐步指导安装VSCode、配置Cline插件、搭建Node.js环境,并重点详解如何通过MCP为Cline集成文件系统和GitHub等工具服务器,实现用自然语言操控开发环境,从而显著提升日常编码与文件管理效率。

weixin_28840143的博客 554

如何用DeerFlow快速制作PPT演示文稿

本文介绍了如何在星图GPU平台上自动化部署DeerFlow镜像,快速实现AI驱动的PPT演示文稿制作。该平台简化了部署流程,用户可轻松利用DeerFlow的深度研究框架,自动化完成从资料搜集、分析到生成结构化PPT的全过程,显著提升内容创作效率。

weixin_28840811的博客 384

【踩坑记录】colmap中的相机位姿的坐标系定义及其可视化结果的隐含转换

1 坐标系定义及转换   首先介绍一下世界坐标系和相机坐标系之间的转换,它们之间是存在一个转换关系的。现假设空间中一点X,它在相机坐标系下的坐标是Xcamera,在世界坐标系下的坐标是Xworld。假设它通过R和t实现从相机坐标系到世界坐标系之间的转换: Xworld = RXcamera + t   那么,由上式,我们可以推得从世界坐标系向相机坐标系的转换关系(RT=R-1,所以通常直接使用RT即可): Xcamera = RTXworld - RTt   所以,两个坐标系之间的转换,需要看其具体

zeeq的博客 2万+

基于深度学习的工业零件缺陷检测系统

工业零件缺陷检测系统摘要 本文介绍了一个基于深度学习的工业零件缺陷检测系统解决方案。该系统采用Faster R-CNN目标检测算法,结合PyTorch框架和OpenCV图像处理库,实现了对工业零件表面缺陷(如裂纹、划痕、凹坑等)的自动检测与定位。系统包含完整的开发流程:从数据采集与标注、数据增强预处理、模型构建与训练,到最终的评估与部署。相比传统机器视觉方法,该深度学习方案具有更强的特征表示能力和环境适应性,能够有效提升工业质检的准确率和效率。文章详细阐述了系统架构设计、实现细节和优化策略,并提供了完整的代

huanghm88的专栏 286

pydown与其他演示工具对比:为什么它是Python开发者的最佳选择

pydown是一款由Python编写的HTML5演示文稿构建工具,它为Python开发者提供了一种简单而强大的方式来创建专业级演示文稿。与其他演示工具相比,pydown具有独特的优势,特别是对于熟悉Python生态系统的开发者来说,它可能是最佳选择。 ## 🚀 Python开发者的天然选择 作为一款用Python编写的工具,pydown与Python开发者的工作流无缝集成。开发者可以利用自己

gitblog_00840的博客 768

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【pikachu皮卡丘渗透测试靶场】远程命令、代码执行漏洞原理及案例演示

37.6-1 远程命令、代码执行漏洞原理及案例演示(Av96582332,P37) RCE(remote command/code execute)概述 RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。 远程系统命令执行 一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口 ...

algae 2476

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

如何利用 AI 将 NotebookLM 生成的“图片版 PPT”转换为可编辑 PPT:一套完整工作流

NotebookLM生成的PPT实为不可编辑的图片集,本文提供完整解决方案。首先分析问题本质:NotebookLM输出的是每页PPT的截图打包成.pptx格式。解决方法分三步:1)解压PPT文件获取图片;2)使用ChatGPT视觉分析重建可编辑元素;3)通过Claude批量合并多页PPT。最终获得完全可编辑的PPTX文件,保留文字修改、图表调整等完整功能。这套AI工作流特别适合政府汇报、企业管理等需要专业修改的场景,实现AI创意与人工编辑的完美结合。完整流程包括:内容生成→图片提取→AI重构→批量合并,将静

Winfredzhang的博客 328

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: 程序员量子力学-海森堡式BUG
下一篇: 图解机器学习
刚是程序员
博客等级 码龄9年 47粉丝 41原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值