OneNote 分析 - 如何访问文档中的文本 Blob?

2022-09-02 22:38:40

我正在为文件扩展名创建一个解析器,完成后,我将将其添加到Apache Tika项目中。.one

以下是我正在创建的APL 2.0许可开源项目:https://github.com/nddipiazza/onenote-parser-java

我在这里使用了规范文档:https://docs.microsoft.com/en-us/openspecs/office_file_formats/ms-one/73d22548-a613-4350-8c23-07d15576be50

作为起点,我从这个开源C++项目中移植了代码:https://github.com/dropbox/onenote-parser

我在解析文档方面已经走了很长一段路,但我遇到了一个障碍。

以下是我用于分析的 OneNote 文件:https://drive.google.com/file/d/1uROTEnKeBKU08CG_K5zdDTGHa178LgBK/view?usp=sharing

Here is the section from this document

我无法在解析的结果中查看 Section1TextArea1 和 Section1TextArea2。所以我缺少某种关键数据解析元素或其他东西。

它肯定在 OneNote 文件本身中。我可以在十六进制查看器中看到它:

hex editor view of the content

下面是 JSON 解析输出:https://gist.github.com/nddipiazza/02d2252d357b3b02a6b9ab1050474267

我觉得规范文档缺少解析此专有格式所需的一些非常重要的信息。

我错过了哪些主要元素导致我无法获得实际的文本内容?


答案 1

我想通了。需要了解的是,OneNote 中的属性值可以具有以下任一条件:

  • 二进制内容
  • Ascii 文本内容
  • UTF-16LE 内容。

到处都散布着各种各样的它们。

另外,我只是继续解析整个根文件树。这将导致大量重复的文本,但我并不在乎。

该项目使用测试用例和修复程序进行了更新:https://github.com/nddipiazza/onenote-parser-java/tree/master/src/main/java/org/apache/tika/onenote

更新:

刚刚创建了apache tika PR:https://github.com/apache/tika/pull/300


答案 2

推荐