我正在尝试为 .ppt 文件构建一个 JavaScript 解析器。 PPTX 没什么大不了的,因为它是一种“开放”格式,但我真的对 .ppt 文件的文件结构迷失了方向,找不到任何有用的信息。
鉴于此,有没有人尝试过这个,或者至少可以指出我在哪里可以看到 .ppt 的“规范”,以便我可以构建解析器?
最诚挚的问候, 塞尔索桑托斯
.ppt 是一种二进制文件格式。您可以在此处阅读 1997-2007 规范
并不是要阻止您尝试,但您应该注意,这对于 1 个开发人员来说可能是一项艰巨/几乎不可能完成的任务,因为整个规范代表了 10 年来数千个编程小时。
Joel Spolsky 有一篇关于处理这些文件格式的好文章。
为了完整起见,这里是 pptx 文件格式的规范。
首先,以防万一有人不知道,所有 Office“X”文件(pptx、xlsx、docx)都只是 zip 文件!如果将它们重命名为 .zip,则可以在任何 zip 资源管理器中打开它们(包括直接 Windows 10/11),它们包含所有嵌入的图像/声音/xml/等。您的文档使用的文件!只需在 zip 中编辑它们并保存,Office 甚至无法告诉您已编辑它们。
好吧,除此之外,Microsoft Office 文件,包括 powerpoint 文件(pptx 之前)都是“CFB”(复合文件二进制)格式。这曾经是定制的,但现在只是标准拉链。
这是 Power Point 文件的完整规范。版本 3.0 适用于带有“PPT”扩展名的文件:https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-ppt/6be79dde-33c1-4c1b-8ccc-4b2301c08662?redirectedfrom=MSDN
这是 CFB 格式的完整规范。 PPT 文件使用 3.0 版本:https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-cfb/53989ce4-7b05-4f8d-829b-d08d6148375b
PPT 还是 PPTX?
在 Microsoft Office 中,CFB 4.0 及更高版本在文件扩展名末尾使用“X”,并且是开源的,但是 Microsoft 决定也共享 3.0 版本。版本 3.0 是所有不带“x”扩展名的 Office 文件使用的格式,即 ppt、doc、xls、msg。
版本 1 和 2 已贬值,并且 Microsoft 从未发布过且不打算发布其格式。它本质上是一种自定义/原始 zip 格式。
什么是CFB/OLE/COM?
CFB 也称为 OLE(对象链接和嵌入)或 COM(组件对象模型)格式。如果您曾经编写过 Windows 应用程序或在安装 Windows 3.x 或 9x 时注意过安装消息,您可能已经见过术语“OLE”或“COM”。微软在90年代初也做了很多广告。这和 PPT 文件使用的东西是一样的! :)
CFB 是如何工作的?
CFB 自 v3/PPT 以来发生了很大变化,但 3.0 一般是这样工作的:
如果您熟悉 FAT 文件系统,那么您就会熟悉 CFB 和 PPT 文件格式。他们在很多方面都非常相似。
这就是 PPT 和其他办公格式可以在其中存储多种内容的方式,例如多张图片、图表等;他们只是将多个文件与其主文件一起存储。
所有 CFB 文件必须包含 1 个主文件。然后该文件可以有子文件,子文件可以有子文件,依此类推。 CFB 中的主文件始终是相关的主记录,在 PPT 中,即您的演示文稿本身。子文件可能是图片或其他嵌入内容。
如果您只是想看PPT
npm 包
ppt
(https://www.npmjs.com/package/ppt)可以读取 ppt 格式并输出任何 powerpoint 包含的文本。从命令提示符中这样使用它:
安装...
npm i ppt
使用...
ppt test.ppt
(将返回整个演示文稿的文本)
在此处查看源代码:https://github.com/SheetJS/js-ppt
如果您想提取 PPT 或其他 Office 文件(如 DOC/XLS/MSG)中包含的所有文件(如图像)