【问题标题】:How to identify an ODF file?如何识别ODF文件?
【发布时间】:2009-11-30 04:52:09
【问题描述】:

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

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

所以我真正要问的是 ODF 容器中是否有任何必需文件?如果是,那么该文件是否存在于 zip 中container 表明它很可能是一个 ODF 文件,而没有该文件则表明它肯定是不是一个 ODF 文件。

【问题讨论】:

    标签: file zip odf


    【解决方案1】:

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

    【讨论】:

    • mimetype 文件是否必须位于有效的 ODF 文件中?
    • 不在 ODF1.0 中:17.4 MIME 类型流:如果使用包的文档的 MIME 类型存在,那么包应该包含一个名为“mimetype”的流。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      oDoc = ThisComponent
      If oDoc.BuildID = "" Then
          bIsNotODF = TRUE
      Endif
      

      【讨论】:

      • 我认为如果您澄清什么是“ThisComponent”、您的代码 sn-p 使用什么语言以及如果输入只是文件数据如何获取此信息会有所帮助本身。
      猜你喜欢
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 2014-12-12
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多