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.xmlOhhh. 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.xmlLe 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 :)