Link

Extraction des méta-données contenues dans les fichiers uploadés

In brief...
Cet article explique comment fonctionne l'extraction des meta-données des fichiers associés aux FileDocument. Ces principes sont illustrés avec un exemple sur l'extraction des méta-données des documents Microsoft Office.
Subject Jalios API
Products JCMS 4.0
JCMS 4.0.3
JCMS 4.1.0
JCMS 4.1.1
Published 8/25/04
Writer Olivier Dedieu

1. L'extraction des méta-données

Lorsqu'un fichier est uploadé sur un site JCMS, une publication de type FileDocument est créée. Cette publication contient différentes informations sur le document telle que son titre, son auteur, ses catégories, ses droits d'accès, … Ces informations doivent être saisies par le contributeur lors du dépôt de fichier ou à posteriori. Néanmoins, certains types de fichier contiennent en leur sein d'autres méta-données produites par l'application qui les à créés.  Par exemple, dans une image JPEG, il est possible de connaître non seulement les dimensions de l'image, la profondeur mais aussi, dans le cas d'images issues d'un appareil photo numérique, toutes les caractéristiques de l'appareil au moment de la prise de vue (date, modèle, focale, flash, …).

JCMS fournit en standard un mécanisme générique d'extraction des méta-données associées aux FileDocument, les MetaDataExtractor (MDE). Un MDE est une classe Java implémentant l'interface com.jalios.jcms.MetaDataExtractor et associée à un type de contenu. JCMS est livré avec deux MDE :

  • com.jalios.jcms.ImageMetaDataExtractor : ce MDE extrait les dimensions (hauteur, largeur) et le nombre de bits par pixel de la plupart des formats d'image. Dans le cas des images GIF animées, il extrait aussi le nombre d'images et dans le cas des images JPEG, il extrait l'ensemble des méta-données EXIF utilisées par les appareils photo numériques.
  • com.jalios.jcms.PDFMetaDataExtractor : ce MDE extrait les méta-données des documents PDF (titre, sujet, mot-clés, auteur, …)

2. Ajout d'un MetaDataExtractor à JCMS

Pour extraire les méta-données d'un type de fichier, il faut donc :

  1. Développer une classe implémentant l'interface com.jalios.jcms.MetaDataExtractor
  2. Associer cette classe à un ou plusieurs types de fichier au travers des propriétés file-document.mde.<mime/type>

Ensuite, lors de l'affichage d'un FileDocument, JCMS retrouve le MDE associé à ce fichier et extrait et affiche automatiquement l'ensemble des méta-données disponibles.

L'interface com.jalios.jcms.MetaDataExtractor comporte deux methodes :

void setFile(File file) : cette méthode est invoquée pour fournir le fichier duquel doivent être extraites les méta-données
Map getMap() : cette méthode doit retourner une Map contenant les nom/valeur des méta-données.

3. Les API associées aux méta-données

La méthode getMetaDataMap() de la classe com.jalios.jcms.FileDocument, renvoie une Map contenant les méta-données associées au FileDocument. Afin de ne pas dégrader les performances, les méta-données sont mises en cache. Ce cache est invalidé lorsque le fichier ou le type de contenu du FileDocument est mis à jour.

La méthode getMetaData(String tag) de la classe com.jalios.jcms.FileDocument, renvoie la valeur de la méta-donnée tag.

La méthode getMetaDataExtractor(String contentType) de la classe Channel renvoie le MDE associé au contentType fournit

4. Développement d'un MDE pour les documents Microsoft Office

4.1 L'API POI

Le projet Jakarta POI propose un ensemble de librairies Java permettant de lire les formats de fichier MS Office. La libraire HPSF permet d'extraire les propriétés (i.e. les méta-données) des documents MS Office. La page HPSF How-To décrit en détail comment utiliser cette API.

Afin de pouvoir utiliser cette API, il faut placer le fichier JAR poi-2.5.1-final-20040804.jar dans le répertoire WEB-INF/lib/.


4.2 La classe MSOfficeMetaDataExtractor

La classe MSOfficeMetaDataExtractor est placée dans le package custom. La méthode setFile() déclenche l'extraction des méta-données. Celle-ci est réalisée par la classe imbriquée PropertyListener qui sera invoquée par POI à la lecture du fichier (pour plus de détails sur l'implémentation consulter l'exemple du HPSF How-To).

package custom;
import java.io.*;
import java.util.*;
import org.apache.poi.hpsf.*;
import org.apache.poi.poifs.eventfilesystem.*;
import com.jalios.jcms.MetaDataExtractor;
import com.jalios.util.Util;
public class MSOfficeMetaDataExtractor implements MetaDataExtractor {
  
  HashMap map = new HashMap();

public void setFile(File file) { try { POIFSReader reader = new POIFSReader(); reader.registerListener(new PropertyListener(map), "\005SummaryInformation"); reader.read(new FileInputStream(file)); } catch(Exception ex) { ex.printStackTrace(System.out); } }
public Map getMap() { return map; }
class PropertyListener implements POIFSReaderListener { HashMap map; PropertyListener(HashMap map) { this.map = map; } public void processPOIFSReaderEvent(POIFSReaderEvent event) { SummaryInformation si = null; try { si = (SummaryInformation) PropertySetFactory.create(event.getStream()); } catch (Exception ex) { throw new RuntimeException ("Property set stream \"" + event.getPath() + event.getName() + "\": " + ex); } if (si.getTitle() != null) { map.put("MSO Titre", si.getTitle()); } if (si.getSubject() != null) { map.put("MSO Sujet", si.getSubject()); } if (si.getAuthor() != null) { map.put("MSO Auteur", si.getAuthor()); } if (si.getKeywords() != null) { map.put("MSO Mots-clés", si.getKeywords()); } if (si.getComments() != null) { map.put("MSO Comments", si.getComments()); } } } }

4.3 Intégration du MSOfficeMetaData dans JCMS

Le MDE est déclaré dans WEB-INF/data/webapp.prop.

file-document.mde.application/msword:             custom.MSOfficeMetaDataExtractor
file-document.mde.application/vnd.ms-excel:       custom.MSOfficeMetaDataExtractor
file-document.mde.application/vnd.ms-powerpoint:  custom.MSOfficeMetaDataExtractor

4.4 Test

Pour tester le bon fonctionnement, il faut créer un document MS Office (p. ex. MS Word) dans lequel on aura rempli les propriétés (Fichier > Propriétés)

jcb mde word prop

Il suffit ensuite d'uploader ce fichier et de consulter sa fiche (en cliquant sur son icône dans la liste de contenus)

jcb mde filedoc


 

Références :


Member Discussions

Login   Home   fr en
JALIOS SA - SIREN 440 126 035