Linux中國

開放文檔格式 ODT 文件格式解析

開放文檔格式(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 文件包含這一行,它定義了在哪裡可以找到主要內容:
<manifest:file-entry manifest:full-path="content.xml" manifest:media-type="text/xml"/>
  1. content.xml 文件包含文檔的實際內容。
  2. 我的文檔中只有一張截圖,它位於 Pictures 目錄中。

從 ODT 中提取文件

由於 ODT 文檔是一個具有特定結構的 Zip 文件,因此可以從中提取文件。你可以先解壓縮整個 ODT 文件,例如使用 unzip 命令:

$ unzip -q &apos;Nibbled to death by ducks.odt&apos; -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/

就是這張圖片:

Image of rubber ducks in two bowls

開放文檔格式

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中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    這個站點使用 Akismet 來減少垃圾評論。了解你的評論數據如何被處理

    More in:Linux中國

    Linux中國

    關於Linux防火牆iptables的面試問答

    Nishita Agarwal是Tecmint的用戶,她將分享關於她剛剛經歷的一家公司(印度的一家私人公司Pune)的面試經驗。在面試中她被問及許多不同的問題,但她是iptables方面的專家,因此她想分享這些關於iptables的問題和相應的答案給那些以後可能會進行相關面試的人。 所有的問題和相應的答案都基於Nishita Agarwal的記憶並經過了重寫。 嗨,朋友!我叫Nishita Agarwal。我已經取得了理學學士學位,我的專業集中在UNIX和它的變種(BSD,Linux)。它們一直深深的吸引著我。我在存儲方面有1年多的經驗。我正在尋求職業上的變化,並將供職於印度的P
    Linux中國

    Lets Encrypt 已被所有主流瀏覽器所信任

    旨在讓每個網站都能使用 HTTPS 加密的非贏利組織 Lets Encrypt 已經得了 IdenTrust的交叉簽名,這意味著其證書現在已經可以被所有主流的瀏覽器所信任。從這個裡程碑事件開始,訪問者訪問使用了Lets Encrypt 證書的網站不再需要特別配置就可以得到 HTTPS 安全保護了。 Lets Encrypt 的兩個中級證書 ...
    Linux中國

    SSL/TLS 加密新紀元 – Lets Encrypt

    根據 Let's Encrypt 官方博客消息,Let's Encrypt 服務將在下周(11 月 16 日)正式對外開放。 Let's Encrypt 項目是由互聯網安全研究小組(ISRG,Internet Security Research Group)主導並開發的一個新型數字證書認證機構(CA,Certificate ...