开放文档格式 ODT 文件格式解析
创始人
2024-03-02 17:48:57
0

开放文档格式(ODF)基于开放标准,你可以使用其它工具检查它们,甚至从中提取数据。你只需要知道从哪里开始。

过去,文字处理文件是封闭的专有格式。在一些较旧的文字处理软件中,文档文件本质上是该软件的内存转储。虽然这样可以让加载文件更快,但也使文档文件格式变得不透明。

2005 年左右, 结构化信息标准促进组织 Organization for the Advancement of Structured Information Standards (OASIS)为所有类型的办公文档定义了一种开放格式,即 办公应用程序开放文档格式 Open Document Format for Office Applications (ODF)。由于 ODF 是基于 OpenOffice.org 的 XML 文件规范的开放式标准,因此你也可以将其简称为 “开放文档格式”。ODF 包括几种文件类型,包括用于 开放文档文本OpenDocument Text 文档的 ODT。ODT 文件中有很多值得探索的内容,它的本质是一个 Zip 文件。

ODT 文件结构

跟所有 ODF 文件一样,ODT 文件实际上是一个 XML 文档和其它文件的 Zip 压缩包。使用 Zip 可以占用更少的磁盘空间,同时也意味着可以用标准 Zip 工具来检查它。

我有一篇关于 IT 领导力的文章,名为“Nibbled to death by ducks”,我将其保存为 ODT 文件。由于 ODF 文件是一个 zip 容器,你可以用 unzip 命令来检查它:

$ unzip -l 'Nibbled to death by ducks.odt'
Archive: Nibbled to death by ducks.odt
Length Date Time Name
39 07-15-2022 22:18 mimetype
12713 07-15-2022 22:18 Thumbnails/thumbnail.png
915001 07-15-2022 22:18 Pictures/10000201000004500000026DBF6636B0B9352031.png
10879 07-15-2022 22:18 content.xml
20048 07-15-2022 22:18 styles.xml
9576 07-15-2022 22:18 settings.xml
757 07-15-2022 22:18 meta.xml
260 07-15-2022 22:18 manifest.rdf
0 07-15-2022 22:18 Configurations2/accelerator/
0 07-15-2022 22:18 Configurations2/toolpanel/
0 07-15-2022 22:18 Configurations2/statusbar/
0 07-15-2022 22:18 Configurations2/progressbar/
0 07-15-2022 22:18 Configurations2/toolbar/
0 07-15-2022 22:18 Configurations2/popupmenu/
0 07-15-2022 22:18 Configurations2/floater/
0 07-15-2022 22:18 Configurations2/menubar/
1192 07-15-2022 22:18 META-INF/manifest.xml
970465 17 files

我想强调 Zip 文件结构的以下几个元素:

  1. mimetype 文件用于定义 ODF 文档。处理 ODT 文件的程序,如文字处理程序,可以使用该文件来验证文档的 MIME 类型。对于 ODT 文件,它应该总是:
application/vnd.oasis.opendocument.text
  1. META-INF 目录中有一个 manifest.xml 文件。它包含查找 ODT 文件其它组件的所有信息。任何读取 ODT 文件的程序都从这个文件开始定位其它内容。例如,我的 ODT 文档的 manifest.xml 文件包含这一行,它定义了在哪里可以找到主要内容:

  1. content.xml 文件包含文档的实际内容。
  2. 我的文档中只有一张截图,它位于 Pictures 目录中。

从 ODT 中提取文件

由于 ODT 文档是一个具有特定结构的 Zip 文件,因此可以从中提取文件。你可以先解压缩整个 ODT 文件,例如使用 unzip 命令:

$ unzip -q 'Nibbled to death by ducks.odt' -d Nibbled

一位同事最近向我要了一份我在文章中提到的图片。通过查看 META-INF/manifest.xml 文件,我找到了嵌入图像的确切位置。用 grep 命令可以找到描述图像的行:

$ cd Nibbled
$ grep image META-INF/manifest.xml

开放文档格式

ODF 是一种开放的文件格式,它可以描述文字处理文件(ODT)、电子表格文件(ODS)、演示文稿(ODP)和其它文件类型。由于 ODF 格式基于开放标准,因此可以使用其他工具检查它们,甚至从中提取数据。你只需要知道从哪里开始。所有 ODF 文件都以 META-INF/manifest.xml 为“引导”文件,通过它你能找到其余的所有内容。

(题图:MJ/d245ab34-f0b0-452c-b29a-ece9aa78f11a)


via: https://opensource.com/article/22/8/odt-files

作者:Jim Hall 选题:lkxed 译者:toknow-gh 校对:校对者ID

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

不支持"toDF...
在某些情况下,可能会遇到不支持toDF()的问题,尤其是在使用不同...
2025-01-11 18:30:53
BIOMOD_projec...
BIOMOD投影TSS二元转换被关闭,因为找不到相应的评估方法。这...
2024-12-19 00:30:49
Bindingaclass...
在Python中,通过将一个类方法绑定到另一个类的方法,我们可以轻...
2024-12-18 01:31:18
编译错误,找不到符号[ER...
这个错误通常出现在使用Java集合API时,代码中试图调用一个不存...
2024-12-07 23:02:29
编译错误“.ToStrin...
这个编译错误常见于尝试在自定义类中覆盖ToString方法时。解决...
2024-12-07 22:31:08
Backenddatafi...
后端数据过滤。使用 EF 进行数据访问并映射到 DTO。在后端代码...
2024-11-20 03:00:32

热门资讯

使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
Bazzite:专为 Stea... 为 Linux 桌面或者 Steam Deck 做好游戏准备,听起来都很刺激!对于一个专为 Linu...
Motrix:一个漂亮的跨平台... 一个开源的下载管理器,提供了一个简洁的用户界面,同时提供了跨平台操作的所有基本功能。在这里了解关于它...
Bash 脚本中如何使用 he... here 文档 here document (LCTT 译注:here 文档又称作 heredoc ...
使用 dialog 和 jq ... 为何选择文字用户界面(TUI)?许多人每日都在使用终端,因此, 文字用户界面 Text User I...