| auteur : GrandFather |
OpenXML est le format de fichier adopté par les documents de la suite Microsoft Office 2007, à partir de la version 2007. Ce format, fruit de la collaboration de Microsoft, d'Intel et d'Apple, entre autres, est totalement libre de royalties, et sa pérennité et son indépendance vis-à-vis de tout éditeur sont garanties par son élévation au rang de norme par l'ECMA (le standard ISO devrait bientôt suivre).
|
lien : Structure des fichiers OpenXML
lien : Rubrique XML : Cours, tutoriels, FAQ, Sources, Livres, Forums
|
| auteur : Guillaume Rossolini |
Un document OpenXML est en fait une archive ZIP.
Cette archive contient au minimum (cas d'un document Word) :
- /[Content_Types].xml : Définit les types de fichiers contenus dans l'archive ;
- /_rels/.rels : Définit les relations entre les fichiers de l'archive ;
- /word/document.xml : La Part principale.
/[Content_Types].xml | <? xml version="1.0" encoding="utf-8" ? >
< Types xmlns = " http://schemas.openxmlformats.org/package/2006/content-types " >
< Default Extension = " rels " ContentType = " application/vnd.openxmlformats-package.relationships+xml " / >
< Default Extension = " xml " ContentType = " application/xml " / >
< Override PartName = " /word/document.xml " ContentType = " application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml " / >
< / Types >
|
/_rels/.rels | <? xml version="1.0" encoding="utf-8" ? >
< Relationships xmlns = " http://schemas.openxmlformats.org/package/2006/relationships " >
< Relationship Id = " rId1 " Type = " http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument " Target = " word/document.xml " / >
< / Relationships >
|
/word/document.xml | <? xml version="1.0" encoding="utf-8" ? >
< w : document xmlns : w = " http://schemas.openxmlformats.org/wordprocessingml/2006/main " xmlns : r = " http://schemas.openxmlformats.org/officeDocument/2006/relationships " >
< w : body >
< w : p >
< w : r >
< w : t > Hello world!< / w : t >
< / w : r >
< / w : p >
< / w : body >
< / w : document >
|
Compresser cette arborescence au format ZIP et renommer en .docx suffit pour que Word 2007 ouvre un document "Hello world!".
Le script suivant permet de créer un document Word 2007 de toutes pièces, grâce à PHP 5 :
hello-world.php | <?php
$types = new DOMDocument(' 1.0 ' , ' utf-8 ' );
$ XMLTypes = $types ->createElement (' Types ' );
$XMLTypes ->setAttribute (' xmlns ' , ' http://schemas.openxmlformats.org/package/2006/content-types ' );
$types ->appendChild ($ XMLTypes );
$ XMLType = $types ->createElement (' Default ' );
$XMLType ->setAttribute (' Extension ' , ' rels ' );
$XMLType ->setAttribute (' ContentType ' , ' application/vnd.openxmlformats-package.relationships+xml ' );
$XMLTypes ->appendChild ($ XMLType );
$ XMLType = $types ->createElement (' Default ' );
$XMLType ->setAttribute (' Extension ' , ' xml ' );
$XMLType ->setAttribute (' ContentType ' , ' application/xml ' );
$XMLTypes ->appendChild ($ XMLType );
$ XMLType = $types ->createElement (' Override ' );
$XMLType ->setAttribute (' PartName ' , ' /word/document.xml ' );
$XMLType ->setAttribute (' ContentType ' , ' application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml ' );
$XMLTypes ->appendChild ($ XMLType );
$rels = new DOMDocument(' 1.0 ' , ' utf-8 ' );
$ XMLRels = $rels ->createElement (' Relationships ' );
$XMLRels ->setAttribute (' xmlns ' , ' http://schemas.openxmlformats.org/package/2006/relationships ' );
$rels ->appendChild ($ XMLRels );
$ XMLRel = $rels ->createElement (' Relationship ' );
$XMLRel ->setAttribute (' Id ' , ' rId1 ' );
$XMLRel ->setAttribute (' Type ' , ' http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument ' );
$XMLRel ->setAttribute (' Target ' , ' word/document.xml ' );
$XMLRels ->appendChild ($ XMLRel );
$word = new DOMDocument(' 1.0 ' , ' utf-8 ' );
$ XMLDocument = $word ->createElement (' w:document ' );
$XMLDocument ->setAttribute (' xmlns:w ' , ' http://schemas.openxmlformats.org/wordprocessingml/2006/main ' );
$word ->appendChild ($ XMLDocument );
$ XMLBody = $word ->createElement (' w:body ' );
$XMLDocument ->appendChild ($ XMLBody );
$ XMLParagraph = $word ->createElement (' w:p ' );
$XMLBody ->appendChild ($ XMLParagraph );
$ XMLRun = $word ->createElement (' w:r ' );
$XMLParagraph ->appendChild ($ XMLRun );
$ XMLText = $word ->createElement (' w:t ' , utf8_encode(" Hello world ! " ));
$XMLRun ->appendChild ($ XMLText );
$document = new ZipArchive();
$document ->open (' hello-world.docx ' , ZIPARCHIVE: : OVERWRITE);
$document ->addFromString (' [Content_Types].xml ' , $types ->saveXML ());
$document ->addFromString (' _rels/.rels ' , $rels ->saveXML ());
$document ->addFromString (' word/document.xml ' , $word ->saveXML ());
$document ->close ();
?>
|
|
lien : Comment créer une Part de relations pour un document OpenXML ?
lien : Comment créer une Part de types pour un document OpenXML ?
lien : Comment créer une Part Word pour un document OpenXML ?
|
| auteur : Guillaume Rossolini | Un paragraphe est un élément 'p' contenant :
- Un élément "pPr" facultatif (propriétés de paragraphe) ;
- Un élément "rPr" facultatif (propriétés de run) ;
- Un ou plusieurs éléments "r" (run).
Dans le cas de Word (namespace 'w') : | $ XMLParagraph = $dom ->createElement (' w:p ' );
$XMLDocument ->appendChild ($ XMLParagraph );
|
|
| auteur : Guillaume Rossolini |
Il faut ajouter un élément "r" (run) à un paragraphe, puis un élément "t" (text) à ce run.
Dans le cas de Word (namespace 'w') : | $ XMLRun = $dom ->createElement (' w:r ' );
$XMLParagraph ->appendChild ($ XMLRun );
$ XMLText = $dom ->createElement (' w:t ' , " Du texte ici . . . " );
$XMLRun ->appendChild ($ XMLText );
|
|
| auteur : Guillaume Rossolini |
Chaque run a ses propriétés, par exemple mise en gras, italique, etc. Ainsi, le texte doit être divisé en runs ayant une mise en forme commune.
À titre d'exemple, le texte suivant devra être divisé en 3 runs (normal, gras, normal) : "Du texte en gras."
Dans le cas de Word (namespace 'w') : | $ XMLParagraph = $dom ->createElement (' w:p ' );
$XMLDocument ->appendChild ($ XMLParagraph );
$ XMLRun = $dom ->createElement (' w:r ' );
$XMLParagraph ->appendChild ($ XMLRun );
$ XMLText = $dom ->createElement (' w:t ' , " Du texte en " );
$XMLRun ->appendChild ($ XMLText );
$ XMLRun = $dom ->createElement (' w:r ' );
$XMLParagraph ->appendChild ($ XMLRun );
$ XMLRPr = $dom ->createElement (' w:rPr ' );
$XMLRun ->appendChild ($ XMLRPr );
$ XMLBold = $dom ->createElement (' w:b ' );
$XMLRPr ->appendChild ($ XMLBold );
$ XMLText = $dom ->createElement (' w:t ' , " gras " );
$XMLRun ->appendChild ($ XMLText );
$ XMLRun = $dom ->createElement (' w:r ' );
$XMLParagraph ->appendChild ($ XMLRun );
$ XMLText = $dom ->createElement (' w:t ' , " . " );
$XMLRun ->appendChild ($ XMLText );
|
N. B. : Il faut ajouter l'attribut "xml:space" avec la valeur "preserve" pour que les espaces soient conservés entre les runs.
Dans le cas de Word (namespace 'w') : | $ XMLText = $dom ->createElement (' w:t ' , " Du texte en " );
$XMLText ->setAttribute (' xml:space ' , ' preserve ' );
$XMLRun ->appendChild ($ XMLText );
|
|
Consultez les autres F.A.Q.
Les sources présentés sur cette page sont libres de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2003
Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérêts.
Cette page est déposée à la SACD.
|