0

下午好,

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

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

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

我想我知道的。

1/ .key 文件是一组压缩的对象,可以使用 zipfile 等通用模块解压缩。解压缩后,可以分离密钥文件,以访问/index 分支和组成 IWA 对象。

2/ IWA 文件有一个 4 字节的 little endian 标头,其余的应遵循 google protobuf 编码。

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

如果:

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

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

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

谢谢你。

生锈的

感激地接受任何见解

4

1 回答 1

0

我知道这是一个相对古老的问题,但我遇到了它并会提供一些信息。

这页纸

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

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

于 2019-04-09T08:11:04.567 回答