使用Python

时间:2018-06-15 23:24:10

标签: python protocol-buffers keynote

下午好,

我正在寻找使用KeyNote文件(~2017 ver 8.x)的一些见解。

我的目标是相当基本的。我只想从大约3000个KeyNote文件中提取文本和图像。由于许多工具的时代,我在Python 2.7中工作,但我想最终升级到3.x或4.x.尽管进行了大量的阅读和实验,但我还是看到了从IWA对象中提取消息的墙。

我一直在尝试各种方法,并且还尝试使用protobuf编码信息手动解构IWA文件。然而,有些事情并没有加起来。使用Protobuf示例代码创建的消息进行测试我可以解构100%,但是来自KeyNote文件的.IWA块最终会出现无效的线类型,重复的字段数或不合理的字段大小(例如,大于IWA块。)

我想我知道。

1 / .key文件是一组压缩的对象,可以使用zipfile这样的通用模块解压缩。 解压缩后,密钥文件可以分开,从而可以访问/ index分支和constituant IWA对象。

2 / IWA文件有一个4字节的小端头,其余的应该遵循谷歌protobuf编码。

3 / protobuf编码确实适用于IWA文件的某些方面。例如,识别的文本块具有正确的标签。然而,IWA的其他部分似乎不遵循规则要么导致无效的线型代码(例如,线型= 6),要么字段数为零或被重用。

我会感激的是:

A /有人可以确认KeyNote编码符合Google protobuf编码,或者指出我可以使用的有效编码时间表或方案。

B /除了应用于整个.key文件的压缩之外,有人可以澄清IAW对象是否被单独压缩。文档不清楚,但我尝试进一步解压缩IWA对象并不成功。

C /有人可以将我引导到一个可以从KeyNote文件中提取数据的功能性Python库。 尽管我在字节和位级别上玩文件解构很有乐趣,但仍然有一个目标: - )

谢谢。

生锈

任何见解都表示感谢

1 个答案:

答案 0 :(得分:0)

我知道这是一个相对较旧的问题,但是我遇到了这个问题,并将提供一些信息。

页面

https://github.com/obriensp/iWorkFileFormat/blob/master/Docs/index.md#iwa

似乎有很多关于格式的信息。特别是,(从我从该页面收集的信息来看),IWA似乎并没有完全遵循ProtoBuf编码,这可能是导致无效线号和不合理的字段长度导致问题的原因。