Un docx, c'est quoi ?

Aujourd'hui, j'ai tenté de ressortir des méta données, avec PHP, des fichiers Office, tous aux formal XML. Pour ceux qui l'ignorent, tous les fichiers de la suite Office se terminant par un X sont un "nouveau" format (plutôt le dernier format, car il n'a pas loin de 10 ans !) de la suite Office. En formation, j'avais entendu dire que ce fichier n'était ni plus ni moins qu'un fichier XML à la "sauce" Microsoft. Oui,... enfin presque !

Cet article relate la manière de faire pour aboutir à mes fins. Nous verrons pourquoi je n'ai pas pu le faire. L'idée, tout comme l'article de la semaine dernière, etait bien d'extraire des méta-données de ces fichiers, pour les afficher sur la page du fichier de ma GED, GED propulsée par Joomla.

Dans un premier temps, je me suis posé la question "un docx, c'est quoi ?" et je n'ai pas mis lontemps à comprendre : un docx, c'est ni plus ni moins qu'un ensemble de fichiers, compressé au format... zip.

-"A ouais, alors je peux l'ouvrir avec un dézippeur ?"
-"Bah wai !"

dezippeur

On a déja fait un grand pas. Mais maintenant, y'a quoi dans cette archive et surtout y'a-t-il des méta données ?

Et les méta-données ?

Je ne vais pas vous cacher que comme ce n'est que cette partie là qui m'interessait, je ne suis pas allé voir le reste du zip, du docx. Et c'est plutôt pas trop mal fait (je ne vais pas encenser non plus un format propriétaire !)

Vous voyez le dossier docsProp ?

  • Non achetez des lunettes.
  • Oui, ouvrez le !

Vous avez à l'intérieur deux fichiers dans un format "standard", si l'on en croit l'extension de fichier : XML ! Ouvrons le dans un (vrai) navigateur (qui lui sait afficher correctement un XML)

arbreXML

 

Interessant tout ca, surtout qu'un XML, ca se parse facilement ! Et les méta données, du coup je peux les récupérer....

Oui... mais non !

Jusque là, content de ma découverte, je me suis dis, y'a pu qu'a parser. Et quand on tient un blog sur lees API du web, parser un fichier XML, ca reste dans mes cordes. Sauf que...

Sauf que, on l'a vu en début d'article, un .docx est un fichier ZIP. Et pour dézipper un .zip en PHP, il faut des bibliothèques compatibles php 7.2. Or je ne travaille pas (en local, je précise !) sur cette version de PHP, je n'ai jamais fait la mise à jour et reste sur un version 2. Aller je blague mais je suis sur un PHP 5.2, du coup, je n'ai pas accès à la bibliothèque ZipArchive, une biliothèque PHP de travaux sur des ZIP) pour aller, par programmation, dézipper mon fichier docx (ca fait drôle d'écrire cà !) . Ce qui explique que ca ne fonctionne pas. Il faudrait que j'essaie de faire une mise à jour du paquet PHP de ma distrib pour aller + loin dans mon travail.

Mais pas plus. Mais si je trouve une bibliothèque php5 pour faire ca...