因为OpenDocument Format(ODF)是基于开放标准的,你可以使用其他工具来检查它们,甚至从中提取数据。你只需要知道从哪里开始。
文字处理文件曾经是封闭的、专有的格式。在一些旧的文字处理器中,文档文件本质上是文字处理器的内存转储。虽然这使得文档可以更快地加载到文字处理器中,但它也使得文档文件的格式变得不透明。
2005年左右,结构化信息标准促进组织(OASIS)小组为所有类型的办公文件定义了一种开放的格式,即办公应用的开放文档格式(ODF)。你也可能看到ODF被简单地称为 "OpenDocument Format",因为它是一个基于OpenOffice.org的XML文件规范的开放标准。ODF包括几种文件类型,包括OpenDocument Text文档的ODT。在ODT文件中,有很多东西可以探索,而且是从一个压缩文件开始的。
Zip结构
像所有的ODF文件一样,ODT实际上是一个XML文档和其他文件被包裹在一个zip文件容器中。使用zip意味着文件在磁盘上占用更少的空间,但也意味着你可以使用标准的zip工具来检查一个ODF文件。
我有一篇关于IT领导力的文章,叫做 "被鸭子咬死",我把它保存为一个ODT文件。由于这是一个ODF文件,它是一个压缩文件容器,你可以从命令行中使用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文件结构的几个要素。
mimetype文件包含一个定义ODF文档的单行。处理ODT文件的程序,如文字处理器,可以使用这个文件来验证文件的MIME。对于一个ODT文件来说,这应该始终是。
application/vnd.oasis.opendocument.text
META-INF目录里有一个单一的manifest.xml文件。这个文件包含了所有关于在哪里可以找到ODT文件的其他组件的信息。任何读取ODT文件的程序都会从这个文件开始查找其他内容。例如,我的ODT文件的manifest.xml文件包含这一行,它定义了在哪里可以找到主要内容。
<manifest:file-entry manifest:full-path="content.xml" manifest:media-type="text/xml"/>
-
content.xml文件包含文件的实际内容。 -
我的文档包括一个屏幕截图,它包含在
Pictures目录中。
从一个ODT文件中提取文件
因为ODT文件只是一个有特定结构的压缩文件,所以你可以从中提取文件。你可以从解压缩整个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
<manifest:file-entry manifest:full-path="Thumbnails/thumbnail.png" manifest:media-type="image/png"/>
<manifest:file-entry manifest:full-path="Pictures/10000201000004500000026DBF6636B0B9352031.png" manifest:media-type=" image/png”/>
我正在寻找的图像保存在Pictures 文件夹中。你可以通过列出该目录的内容来验证这一点。
$ ls -F
Configurations2/ manifest.rdf meta.xml Pictures/ styles.xml
content.xml META-INF/ mimetype settings.xml Thumbnails/
就在这里。

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