PowerPoint 文件结构

问题描述 投票:0回答:2

我正在尝试为 .ppt 文件构建一个 JavaScript 解析器。 PPTX 没什么大不了的,因为它是一种“开放”格式,但我真的对 .ppt 文件的文件结构迷失了方向,找不到任何有用的信息。

鉴于此,有没有人尝试过这个,或者至少可以指出我在哪里可以看到 .ppt 的“规范”,以便我可以构建解析器?

最诚挚的问候, 塞尔索桑托斯

javascript parsing powerpoint
2个回答
10
投票

.ppt 是一种二进制文件格式。您可以在此处阅读 1997-2007 规范

并不是要阻止您尝试,但您应该注意,这对于 1 个开发人员来说可能是一项艰巨/几乎不可能完成的任务,因为整个规范代表了 10 年来数千个编程小时。

Joel Spolsky 有一篇关于处理这些文件格式的好文章

为了完整起见,这里是 pptx 文件格式的规范


4
投票

首先,以防万一有人不知道,所有 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 一般是这样工作的:

  • 它试图在文件中表示一个简单的“磁盘”(即它有 512 个“标头”,所有数据都存储在 512 个“扇区”中)
  • 它有“子类型”,“PPT”是一种,“MSG”(Outlook)、“DOC”(Word)和“XLS”(Excel)也是一种。
  • 它与 TAR 文件类似,其目的是将一堆文件存储在单个“存档”文件中,但它的目的是“快速”,即在文件本身的扇区中可读,利用较慢的速度磁盘控制器,全部经过优化以读取 512 字节增量。

如果您熟悉 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)中包含的所有文件(如图像)

https://www.npmjs.com/package//compound-binary-file-js

© www.soinside.com 2019 - 2024. All rights reserved.