如何将 Base64 解码为 PowerPoint 文件
- 把 Base64 粘贴到 Base64 或 data URI。
data:application/vnd.openxmlformats-officedocument.presentationml.presentation;base64,前缀没有问题,保存为文本的长字符串可以用 打开 .txt 文件 处理。 - 幻灯片文本 按编号列出每张幻灯片(幻灯片 1、幻灯片 2 等),每个段落的文本单独占一行。没有文本的幻灯片显示为
…。 - 下方的条目列表显示文件的所有组成部分,每项都有 查看 和 保存。
- 点击 下载文件 保存 .pptx。
文本由浏览器的 XML 解析器从幻灯片 XML 中提取。演示文稿中的任何内容都不会被执行,除 Cloudflare 的浏览量统计外,页面也不会发出网络请求。
幻灯片文本包含哪些内容
每张幻灯片都是 .pptx 内一个单独的 XML 文件,预览会提取其中每个段落的文本:标题、正文占位符、文本框、形状、组合形状和表格单元格。标记为隐藏的幻灯片也包括在内。最多读取 200 张幻灯片。
存放在其他地方的内容不会显示:
| 内容 | 存放位置 | 如何查看 |
|---|---|---|
| 演讲者备注 | ppt/notesSlides/notesSlideN.xml | 查看 显示 XML |
| SmartArt 文本 | ppt/diagrams/dataN.xml | 查看 显示 XML |
| 图表 | ppt/charts/chartN.xml,数据在嵌入的工作簿中 | 从 ppt/embeddings/ 中 保存 嵌入的 .xlsx |
| 图片和视频 | ppt/media/ | 查看 可预览,保存 可下载 |
| 批注 | ppt/comments/ | 查看 显示 XML |
幻灯片按其文件名中的编号排列,即 slide1.xml、slide2.xml 等。通常这就是演示文稿的顺序,但被脚本重新排列过的演示文稿可能保留了旧的文件编号,所以编号仅供参考。
确认它是 PPTX
每个 Office Open XML 文件都是 ZIP 压缩包,所以 PowerPoint 演示文稿的 Base64 和 Word 文档、Excel 工作簿一样以 UEsDB 开头。工具通过查找条目中的 ppt/ 文件夹来区分它们。如果内容是其他格式,会有提示说明,并提供正确的扩展名:
| 检测结果 | 提示 |
|---|---|
| DOCX 或 XLSX | “这看起来是 DOCX,而不是 PPTX。”,附带 下载为 .docx |
PDF(JVBERi0) | 导出为 PDF 的演示文稿,附带 下载为 .pdf |
DOC/XLS/MSG (OLE),0M8R4KGxGuE | PowerPoint 97–2003 的旧版 .ppt,或受密码保护的 .pptx。工具无法区分这两种情况,所以前者请在 扩展名 中填 ppt,后者保留 pptx |
带宏的演示文稿(.pptm)包含 ppt/vbaProject.bin。它的文本可以正常预览,但 PowerPoint 只在扩展名为 .pptm 时才会打开它,所以下载前请填入这个扩展名。
用 Python 读取幻灯片文本
只用标准库就能按预览所用的顺序列出每张幻灯片的文本:
import base64, io, re, zipfile
import xml.etree.ElementTree as ET
A = "{http://schemas.openxmlformats.org/drawingml/2006/main}"
with open("deck.b64") as f:
pptx = base64.b64decode(f.read())
with zipfile.ZipFile(io.BytesIO(pptx)) as z:
slides = [n for n in z.namelist() if re.fullmatch(r"ppt/slides/slide\d+\.xml", n)]
slides.sort(key=lambda n: int(re.search(r"\d+", n).group()))
for name in slides:
root = ET.fromstring(z.read(name))
lines = ["".join(t.text or "" for t in p.iter(A + "t")) for p in root.iter(A + "p")]
print(name, [s for s in lines if s.strip()])
对于本页的示例演示文稿,它会输出 ppt/slides/slide1.xml ['Hello from Base64', 'A two-slide deck built in your browser.'],幻灯片 2 也类似。如果需要准确的幻灯片顺序,可以查看 ppt/presentation.xml 中的 <p:sldIdLst> 元素。更多内容见 Python 中的 Base64;压缩包相关的内容见 Base64 转 ZIP。
常见问题
怎么把 Base64 转换成 PowerPoint 文件?
把字符串粘贴到上方,点击 下载文件。演示文稿会保存为 decoded.pptx;如果想用别的名字,请先修改 文件名。
会显示演讲者备注吗?
幻灯片文本中不包含备注。备注保存在 ppt/notesSlides/notesSlide1.xml 等文件中;在条目列表中点击对应条目旁的 查看 即可阅读其 XML,文本位于 <a:t> 元素中。
能以图片形式查看幻灯片吗?
不能。本页只读取幻灯片的文本,不会绘制幻灯片。演示文稿中用到的图片可以在条目列表的 ppt/media/ 中逐个查看和保存。