Как определить файл ODF? - PullRequest
       12

Как определить файл ODF?

2 голосов
/ 30 ноября 2009

Мне нужно иметь возможность определить, что данный файл является файлом ODF, основываясь на содержимом файла, а не на его расширении.

ODF-файлы на самом деле представляют собой набор XML-файлов в zip-контейнере, что означает, что я не могу использовать магическое число файла, поскольку оно будет просто указывать, что это zip-файл.

Так что я действительно спрашиваю: есть ли файлы, которые необходимы для присутствия в контейнере ODF? Если так, то наличие этого файла в контейнере zip указывает что это, вероятно, файл ODF, и отсутствие этого файла указывает на то, что он определенно является , а не файлом ODF.

Ответы [ 3 ]

3 голосов
/ 30 ноября 2009

Почему бы не проверить ODF Технические характеристики ? Файл mimetype, указанный там, вероятно, будет идеальным способом проверки (просто найдите строку vnd.oasis.opendocument в mimetype).

0 голосов
/ 15 мая 2015

Считать идентификатор сборки - если отсутствует, документ не является ODF.

oDoc = ThisComponent
If oDoc.BuildID = "" Then
    bIsNotODF = TRUE
Endif
0 голосов
/ 16 декабря 2010

Насколько я понимаю, в корне архива всегда будут файлы .xml, и эти / эти файлы XML всегда будут содержать строку <office:document в самом начале.

Кажется, что все те, что я видел, содержат в корне файл с именем "content.xml", который содержит эту строку.

Существует не так много приложений, пишущих документы ODF, и в прошлом было только одно. Поэтому не должно быть слишком сложно установить какую-то древнюю версию OpenOffice, сохранить несколько файлов и убедиться, что это правило применяется так же, как и к текущим ODF-файлам.

Я бы проверил что-то подобное на серии известных файлов ODF, чтобы проверить, надежно ли это:

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