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

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

所以我真正要求的是是否有任何必需的文件存在于ODF容器中?如果是这样的话,那个文件就是zip存在容器表示它可能是一个ODF文件,并且缺少该文件表明它肯定是一个ODF文件。

有帮助吗?

解决方案

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

其他提示

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

我见过的所有人似乎都包含一个名为<!> quot; content.xml <!>的文件;在根目录中,它确实包含此字符串。

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

我会在一批已知的ODF文件上测试这样的东西,检查它是否可靠:

$ unzip -c $FILE content.xml | grep -q '<office:document' && echo yes || echo NO

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

oDoc = ThisComponent
If oDoc.BuildID = "" Then
    bIsNotODF = TRUE
Endif
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top