PowerPoint 把内容锁在幻灯片里,一页一块画布,标题和正文散落在各种图形框中。要把这些内容搬进文档、知识库,或直接交给大语言模型处理,得先把它们还原成可编辑的纯文本。Markdown 适合做这一层,放进 Git 仓库还能看到逐行差异。
本文用 Spire.Presentation for JavaScript 在浏览器端把 PowerPoint 转换为 Markdown。可以转换整份演示文稿,也可以只导出其中一张幻灯片。转换基于 WebAssembly 在浏览器本地完成,演示文稿通过虚拟文件系统(VFS)读取,文件不需要上传到服务器。
本文介绍两个核心功能点:
有关安装和项目配置,请参考 React 项目中集成 Spire.Presentation for JavaScript。下面的示例假定 Spire.Presentation 已安装、WebAssembly 模块已初始化。
将整份 PowerPoint 转换为 Markdown
Spire.Presentation for JavaScript 提供 Presentation.SaveToFile() 方法,配合 FileFormat.Markdown,用于把整份演示文稿导出为一个 Markdown 文件。
具体操作步骤如下:
- 获取 Spire.Presentation 的 WASM 模块,确认已就绪。
- 读入示例演示文稿与字体,创建
Presentation对象并加载该文件。 - 使用
Presentation.SaveToFile()方法,将fileFormat设为FileFormat.Markdown,保存为 Markdown 文件。 - 从 VFS 读出结果文件并触发浏览器下载。
- 释放
Presentation对象。
将整份 PowerPoint 转换为 Markdown 的代码如下:
function App() {
const convertToMarkdown = async () => {
// 获取 Spire.Presentation WASM 模块
const pptModule = window.wasmModule?.spirepresentation;
// 检查模块是否就绪
if (!pptModule) {
alert('Spire.Presentation is not ready yet');
return;
}
// 载入示例演示文稿与字体
await window.spire.FetchFileToVFS('数据简报.pptx', "", `${process.env.PUBLIC_URL}/data/`);
await window.spire.FetchFileToVFS('ARIALUNI.TTF', "/Library/Fonts/", `${process.env.PUBLIC_URL}/font/`);
// 创建 Presentation 实例并加载演示文稿
const ppt = new pptModule.Presentation();
ppt.LoadFromFile('数据简报.pptx');
// 将整份演示文稿保存为 Markdown 文件
const outputFileName = '数据简报.md';
ppt.SaveToFile({ file: outputFileName, fileFormat: pptModule.FileFormat.Markdown });
ppt.Dispose();
// 从 VFS 读取生成的文件,触发下载
const fileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
const blob = new Blob([fileArray], { type: 'text/markdown' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = outputFileName;
a.click();
URL.revokeObjectURL(url);
};
return (
<div style={{ textAlign: 'center', height: '300px' }}>
<h1>将 PowerPoint 转换为 Markdown</h1>
<button onClick={convertToMarkdown}>
转换为 Markdown
</button>
</div>
);
}
export default App;
整份演示文稿转换得到的 Markdown 文件:

将指定幻灯片导出为 Markdown
Spire.Presentation for JavaScript 还提供 ISlide.SaveToFile() 方法,用于把一张幻灯片单独导出为 Markdown。
具体操作步骤如下:
- 获取 Spire.Presentation 的 WASM 模块,确认已就绪。
- 读入示例演示文稿与字体,创建
Presentation对象并加载该文件。 - 用
Presentation.Slides.get_Item(index)取出目标幻灯片,索引从 0 开始。 - 使用
ISlide.SaveToFile()方法,将fileFormat设为FileFormat.Markdown,保存为 Markdown 文件。 - 从 VFS 读出结果文件并触发浏览器下载,最后释放资源。
将指定幻灯片导出为 Markdown 的代码如下:
function App() {
const convertSlideToMarkdown = async () => {
// 获取 Spire.Presentation WASM 模块
const pptModule = window.wasmModule?.spirepresentation;
// 检查模块是否就绪
if (!pptModule) {
alert('Spire.Presentation is not ready yet');
return;
}
// 载入示例演示文稿与字体
await window.spire.FetchFileToVFS('数据简报.pptx', "", `${process.env.PUBLIC_URL}/data/`);
await window.spire.FetchFileToVFS('ARIALUNI.TTF', "/Library/Fonts/", `${process.env.PUBLIC_URL}/font/`);
// 创建 Presentation 实例并加载演示文稿
const ppt = new pptModule.Presentation();
ppt.LoadFromFile('数据简报.pptx');
// 取出第 2 张幻灯片(索引从 0 开始)
const slide = ppt.Slides.get_Item(1);
// 将这一页单独保存为 Markdown 文件
const outputFileName = '第2张幻灯片.md';
slide.SaveToFile(outputFileName, pptModule.FileFormat.Markdown);
ppt.Dispose();
// 从 VFS 读取生成的文件,触发下载
const fileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
const blob = new Blob([fileArray], { type: 'text/markdown' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = outputFileName;
a.click();
URL.revokeObjectURL(url);
};
return (
<div style={{ textAlign: 'center', height: '300px' }}>
<h1>导出指定幻灯片为 Markdown</h1>
<button onClick={convertSlideToMarkdown}>
导出第 2 张幻灯片
</button>
</div>
);
}
export default App;
第 2 张幻灯片导出的 Markdown 文件:

一次导出多张幻灯片为 Markdown
ISlide.SaveToFile() 一次只处理一页。要拆成多个文件,遍历 Slides 逐页调用即可,每页各写一个 Markdown 文件:
// 遍历所有幻灯片,每页各导出一个 Markdown 文件
for (let i = 0; i < ppt.Slides.Count; i++) {
const slide = ppt.Slides.get_Item(i);
slide.SaveToFile(`第${i + 1}张幻灯片.md`, pptModule.FileFormat.Markdown);
}
常见问题
转换需要安装 Microsoft PowerPoint 吗
不需要。Spire.Presentation for JavaScript 基于 WebAssembly 在浏览器端读写演示文稿,转换过程不调用本机的 PowerPoint,也不依赖 Office 组件。浏览器能加载 WASM 模块即可。
整份转换和单张导出的分页标记有什么差别
整份转换时,所有幻灯片按顺序写进同一个文件,分页标记从 ==== Page 1 ==== 依次递增,与实际页码对应。单张导出只包含选中的那一页,分页标记固定从 ==== Page 1 ==== 开始,不保留它在原演示文稿里的页码。
为什么导出的 Markdown 顶部有一行评估警告文字
未授权时,Spire.Presentation 会在每页开头写入一行 Evaluation Warning 提示。试用期内这行文字会保留,申请许可证后重新转换即可去掉,详见文末的免费许可证说明。
图片和图表会写进 Markdown 吗
不会。转换输出的是文本层内容,标题、段落、列表和表格会转成对应的 Markdown 语法,幻灯片里的图片、图表只保留其可提取的文字,图形本身不写入文件。需要保留图片时,可以另行用 Slide.SaveAsImage() 把该页导出为图片。
获取免费许可证
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。







