Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

oDoc = ThisComponent
If oDoc.BuildID = "" Then
    bIsNotODF = TRUE
Endif
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top