Pergunta

Eu preciso ser capaz de identificar que um determinado arquivo é um arquivo ODF com base no conteúdo do arquivo, e não na extensão do arquivo.

arquivos ODF são realmente uma coleção de arquivos XML em um recipiente zip, o que significa que eu não posso usar número mágico do arquivo como ele só irá indicar que ele é um arquivo zip.

Então, o que eu realmente estou pedindo é existem arquivos que são necessários para estar presente em um recipiente ODF? Se assim a presença desse arquivo em um zip recipiente indica que é provável que seja um arquivo ODF, ea ausência desse arquivo indica que ele é definitivamente não um arquivo ODF.

Foi útil?

Solução

Por que não confira o ODF Especificação Técnica ? O arquivo mimetype listada, provavelmente haveria uma maneira ideal de verificar (basta olhar para a cadeia vnd.oasis.opendocument na mimetype).

Outras dicas

Pelo que entendi, haverá sempre .xml (s) na raiz do arquivo, e este / estas arquivos xml sempre conterá o <office:document corda muito perto do início.

Todos aqueles que eu vi parecem conter um arquivo chamado "content.xml" na raiz, que contém esta cadeia.

Não há tantas aplicações que escrevem documentos ODF, e, no passado, havia basicamente apenas um. Por isso, não deve ser muito difícil de instalar alguma versão antiga do OpenOffice, salvar alguns arquivos, e verificar que esta regra se aplica como faz em arquivos ODF atuais.

Gostaria de testar com algo parecido com isso em um lote de arquivos saber ODF, para verificar se ele é de confiança:

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

Leia o ID construção -. Se ausente, o documento não é ODF

oDoc = ThisComponent
If oDoc.BuildID = "" Then
    bIsNotODF = TRUE
Endif
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top