3

我需要能够根据文件的内容而不是文件的扩展名来识别给定文件是 ODF 文件。

ODF 文件实际上是 zip 容器中 XML 文件的集合,这意味着我不能使用文件的幻数,因为它只会表明它是一个 zip 文件。

那么我真正要问的是,ODF 容器中是否需要存在任何文件?如果是这样,则该文件在 zip 容器中的存在表明它很可能是 ODF 文件,而该文件的缺失表明它绝对不是ODF 文件。

4

3 回答 3

2

为什么不查看ODF 技术规范?列出的 mimetype 文件可能是一种理想的检查方式(只需vnd.oasis.opendocument在 mimetype 中查找字符串)。

于 2009-11-30T04:55:10.520 回答
0

据我了解,存档的根目录中总会有 .xml 文件,并且此/这些 xml 文件将始终包含<office:document非常接近开头的字符串。

我所看到的所有这些似乎都在根目录中包含一个名为“content.xml”的文件,该文件确实包含此字符串。

编写ODF文档的应用程序并不多,过去基本上只有一个。因此,安装一些古老版本的 OpenOffice、保存一些文件并检查此规则是否适用于当前 ODF 文件应该不会太难。

我会在一批已知的 ODF 文件上进行类似的测试,以检查它是否可靠:

$ unzip -c $FILE content.xml | grep -q '<office:document' && echo yes || echo NO
于 2010-12-15T23:21:56.457 回答
-1

读取构建 ID - 如果缺少,则文档不是 ODF。

oDoc = ThisComponent
If oDoc.BuildID = "" Then
    bIsNotODF = TRUE
Endif
于 2015-05-15T10:56:33.170 回答