Word 2007 : docx et ligne de commande

Petite problématique qui s'impose à nous aujourd'hui et qui concerne docx, le format des documents Word 2007 : comment avoir accès aux informations quand on n'a ni Word ni ses camarades OpenSource ? Bah très facilement, puisqu'il s'agit en fait... D'une archive Zip ! Testons avec un docx simple, j'entends par là, un document docx ne contenant pas d'image, uniquement du texte.
$ file test.docx
test.docx: Zip archive data, at least v2.0 to extract
$ unzip test.docx
Archive:  test.docx
inflating: [Content_Types].xml
inflating: _rels/.rels
inflating: word/_rels/document.xml.rels
inflating: word/document.xml
inflating: word/theme/theme1.xml
inflating: word/settings.xml
inflating: word/webSettings.xml
inflating: word/styles.xml
inflating: docProps/core.xml
inflating: word/numbering.xml
inflating: word/fontTable.xml
inflating: docProps/app.xml
Ohhh. Pleins de truc. Partout. Et en plus c'est du XML !
$ ll -R

.:
total 40
drwxr-xr-x 5 kbux kbux  4096 2011-03-30 10:24 .
drwxr-xr-x 6 kbux kbux  4096 2011-03-30 10:28 ..
-rw-r--r-- 1 kbux kbux  1445 1980-01-01 00:00 [Content_Types].xml
-rw-r--r-- 1 kbux kbux 14165 2011-03-30 09:56 test.docx
drwxr-xr-x 2 kbux kbux  4096 2011-03-30 10:04 docProps
drwxr-xr-x 2 kbux kbux  4096 2011-03-30 10:04 _rels
drwxr-xr-x 4 kbux kbux  4096 2011-03-30 10:04 word

./docProps:
total 16
drwxr-xr-x 2 kbux kbux 4096 2011-03-30 10:04 .
drwxr-xr-x 5 kbux kbux 4096 2011-03-30 10:24 ..
-rw-r--r-- 1 kbux kbux  721 1980-01-01 00:00 app.xml
-rw-r--r-- 1 kbux kbux  741 1980-01-01 00:00 core.xml

./_rels:
total 12
drwxr-xr-x 2 kbux kbux 4096 2011-03-30 10:04 .
drwxr-xr-x 5 kbux kbux 4096 2011-03-30 10:24 ..
-rw-r--r-- 1 kbux kbux  590 1980-01-01 00:00 .rels

./word:
total 72
drwxr-xr-x 4 kbux kbux  4096 2011-03-30 10:04 .
drwxr-xr-x 5 kbux kbux  4096 2011-03-30 10:24 ..
-rw-r--r-- 1 kbux kbux  7633 1980-01-01 00:00 document.xml
-rw-r--r-- 1 kbux kbux  1567 1980-01-01 00:00 fontTable.xml
-rw-r--r-- 1 kbux kbux  4124 1980-01-01 00:00 numbering.xml
drwxr-xr-x 2 kbux kbux  4096 2011-03-30 10:04 _rels
-rw-r--r-- 1 kbux kbux  1702 1980-01-01 00:00 settings.xml
-rw-r--r-- 1 kbux kbux 28471 1980-01-01 00:00 styles.xml
drwxr-xr-x 2 kbux kbux  4096 2011-03-30 10:04 theme
-rw-r--r-- 1 kbux kbux   260 1980-01-01 00:00 webSettings.xml

./word/_rels:
total 12
drwxr-xr-x 2 kbux kbux 4096 2011-03-30 10:04 .
drwxr-xr-x 4 kbux kbux 4096 2011-03-30 10:04 ..
-rw-r--r-- 1 kbux kbux  950 1980-01-01 00:00 document.xml.rels

./word/theme:
total 16
drwxr-xr-x 2 kbux kbux 4096 2011-03-30 10:04 .
drwxr-xr-x 4 kbux kbux 4096 2011-03-30 10:04 ..
-rw-r--r-- 1 kbux kbux 6993 1980-01-01 00:00 theme1.xml
Le contenu de notre docx est sous le répertoire word.
$ cat word/document.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml"><w:body><w:p w:rsidR="009E1CD3" w:rsidRDefault="00D47E10"><w:r><w:t xml:space="preserve">Petit test pour voir comment soutirer des informations à un </w:t></w:r><w:proofErr w:type="spellStart"/><w:r><w:t>docx</w:t></w:r><w:proofErr w:type="spellEnd"/><w:r><w:t xml:space="preserve"> sans utiliser autre chose que la ligne de commande </w:t></w:r><w:r><w:sym w:font="Wingdings" w:char="F04A"/></w:r></w:p><w:sectPr w:rsidR="009E1CD3" w:rsidSect="0047508E"><w:pgSz w:w="11906" w:h="16838"/><w:pgMar w:top="1417" w:right="1417" w:bottom="1417" w:left="1417" w:header="708" w:footer="708" w:gutter="0"/><w:cols w:space="708"/><w:docGrid w:linePitch="360"/></w:sectPr></w:body></w:document>
On a le texte. Mais si on veut les images ? Déjà, c'est facile de voir quand il y en a ! Reprenons notre test.docx, agrémenté d'une belle image :) Le document.xml nous dit tout de suite que l'image est là :
$ cat word/document.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml"><w:body><w:p w:rsidR="009E1CD3" w:rsidRDefault="00D47E10"><w:r><w:t xml:space="preserve">Petit test pour voir comment soutirer des informations à un </w:t></w:r><w:proofErr w:type="spellStart"/><w:r><w:t>docx</w:t></w:r><w:proofErr w:type="spellEnd"/><w:r><w:t xml:space="preserve"> sans utiliser autre chose que la ligne de commande </w:t></w:r><w:r><w:sym w:font="Wingdings" w:char="F04A"/></w:r></w:p><w:p w:rsidR="00B12446" w:rsidRDefault="00B12446"><w:r><w:t>Oh ! Une image !</w:t></w:r></w:p><w:p w:rsidR="00B12446" w:rsidRDefault="00B12446"><w:r><w:rPr><w:noProof/><w:lang w:eastAsia="fr-FR"/></w:rPr><w:drawing><wp:inline distT="0" distB="0" distL="0" distR="0"><wp:extent cx="5762625" cy="3838575"/><wp:effectExtent l="19050" t="0" r="9525" b="0"/><wp:docPr id="1" name="Image 1" descr="C:\\Users\\kbux\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\O6IJKM4N\\MP900433182[1].jpg"/><wp:cNvGraphicFramePr><a:graphicFrameLocks xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" noChangeAspect="1"/></wp:cNvGraphicFramePr><a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"><a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture"><pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture"><pic:nvPicPr><pic:cNvPr id="0" name="Picture 1" descr="C:\\Users\\kbux\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\O6IJKM4N\\MP900433182[1].jpg"/><pic:cNvPicPr><a:picLocks noChangeAspect="1" noChangeArrowheads="1"/></pic:cNvPicPr></pic:nvPicPr><pic:blipFill><a:blip r:embed="rId4" cstate="print"/><a:srcRect/><a:stretch><a:fillRect/></a:stretch></pic:blipFill><pic:spPr bwMode="auto"><a:xfrm><a:off x="0" y="0"/><a:ext cx="5762625" cy="3838575"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom><a:noFill/><a:ln w="9525"><a:noFill/><a:miter lim="800000"/><a:headEnd/><a:tailEnd/></a:ln></pic:spPr></pic:pic></a:graphicData></a:graphic></wp:inline></w:drawing></w:r></w:p><w:sectPr w:rsidR="00B12446" w:rsidSect="0047508E"><w:pgSz w:w="11906" w:h="16838"/><w:pgMar w:top="1417" w:right="1417" w:bottom="1417" w:left="1417" w:header="708" w:footer="708" w:gutter="0"/><w:cols w:space="708"/><w:docGrid w:linePitch="360"/></w:sectPr></w:body></w:document>
Et l'image se situe, elle, tout simplement dans notre dossier media.
$ file word/media/image1.jpeg
word/media/image1.jpeg: JPEG image data, JFIF standard 1.02

Voilà. Tout ça pour dire : même si vous n'avez pas de serveur X, et donc peu de chance d'avoir un LibreOffice ou un OpenOffice, tout n'est pas perdu pour autant :)

Vus : 2127
Publié par K-Tux : 59