Domanda

Devo essere in grado di identificare che un determinato file è un file ODF basato sul contenuto del file e non sull'estensione del file.

I file ODF sono in realtà una raccolta di file XML in un contenitore zip, il che significa che non posso usare il numero magico del file poiché indicherà semplicemente che si tratta di un file zip.

Quindi quello che sto veramente chiedendo è ci sono dei file che sono richiesti per essere presenti in un contenitore ODF? In tal caso la presenza di quel file in una zip Il contenitore indica che è probabile che sia un file ODF e l'assenza di quel file indica che sicuramente non è non un file ODF.

È stato utile?

Soluzione

Perché non dai un'occhiata alle Specifiche tecniche ODF ? Il file mimetype elencato probabilmente sarebbe un modo ideale per verificare (basta cercare la vnd.oasis.opendocument stringa nel mimetype).

Altri suggerimenti

A quanto ho capito, ci saranno sempre file .xml nella radice dell'archivio e questo / questi file xml conterranno sempre la stringa <office:document molto vicino all'inizio.

Tutti quelli che ho visto sembrano contenere un file chiamato " content.xml " nella radice, che contiene questa stringa.

Non ci sono molte applicazioni che scrivono documenti ODF e in passato ce n'era praticamente una. Quindi non dovrebbe essere troppo difficile installare una versione antica di OpenOffice, salvare alcuni file e verificare che questa regola si applichi come sui file ODF correnti.

Proverei con qualcosa del genere su un batch di file ODF conosciuti, per verificare se è affidabile:

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

Leggi l'ID build - se mancante, il documento non è ODF.

oDoc = ThisComponent
If oDoc.BuildID = "" Then
    bIsNotODF = TRUE
Endif
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top