Pregunta

Necesito poder identificar que un archivo dado es un archivo ODF basado en el contenido del archivo y no en la extensión del archivo.

Los archivos ODF son realmente una colección de archivos XML en un contenedor zip, lo que significa que no puedo usar el número mágico del archivo, ya que solo indicará que es un archivo zip.

Entonces, lo que realmente pregunto es ¿hay algún archivo que sea requerido para estar presente en un contenedor ODF? Si es así, la presencia de ese archivo en un archivo zip contenedor indica que es probable que sea un archivo ODF, y la ausencia de ese archivo indica que definitivamente no es no un archivo ODF.

¿Fue útil?

Solución

¿Por qué no echa un vistazo a la especificación técnica ODF ? El archivo mimetype enumerado allí probablemente sería una forma ideal de verificar (solo busque la cadena vnd.oasis.opendocument en el tipo mime).

Otros consejos

Según tengo entendido, siempre habrá archivos .xml en la raíz del archivo, y estos / estos archivos xml siempre contendrán la cadena <office:document muy cerca del principio.

Todos los que he visto parecen contener un archivo llamado " content.xml " en la raíz, que contiene esta cadena.

No hay tantas aplicaciones que escriban documentos ODF, y en el pasado, básicamente había solo una. Por lo tanto, no debería ser demasiado difícil instalar alguna versión antigua de OpenOffice, guardar algunos archivos y verificar que esta regla se aplique como lo hace en los archivos ODF actuales.

Probaría con algo como esto en un lote de archivos ODF conocidos, para verificar si es confiable:

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

Lea la ID de compilación: si falta, el documento no es ODF.

oDoc = ThisComponent
If oDoc.BuildID = "" Then
    bIsNotODF = TRUE
Endif
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top