Question

Quelqu'un m'a demandé de faire une application en php qui va générer un fichier .doc avec une image et quelques tables en elle. Ma première approche était:

<?php
function data_uri($file, $mime) 
{  
  $contents = file_get_contents($file);
  $base64   = base64_encode($contents); 
  return ('data:' . $mime . ';base64,' . $base64);
}
$file = 'new.doc';
$fh = fopen($file,'w');
$uri = data_uri('pic.png','image/png');
fwrite($fh,'<table border="1"><tr><td><b>something</b></td><td>something else</td></tr><tr><td></td><td></td></tr></table>
<br/><img src="'.$uri.'" alt="some text" />
<br/>
<table border="1"><tr><td><b>ceva</b></td><td>altceva</td></tr><tr><td></td><td></td></tr></table>');
fclose($fh);
?>

Cette technique utilise les données uri d'enrobage d'une image.

Cela va générer un fichier HTML qui sera rendu correct dans les navigateurs Web, mais l'image est manquant dans Microsoft Office Word, au moins dans la configuration standard. Puis, tout en éditant le fichier avec Word, j'ai remplacer l'image par une image de fichier et Microsoft Word a changé le contenu du fichier dans Open XML et ajouté un dossier, new_files où il a mis l'image importée (ce qui était un .png ), une version .gif de l'image et un fichier xml:

<xml xmlns:o="urn:schemas-microsoft-com:office:office">
  <o:MainFile HRef="../new.doc" /> 
  <o:File HRef="image001.jpg" /> 
  <o:File HRef="filelist.xml" /> 
</xml>

Maintenant, cela ne suffit pas bon non plus car je veux que ce soit tout conservé dans un seul fichier .doc. Est-il possible d'intégrer une image dans un fichier .doc au format OpenXML-?

Était-ce utile?

La solution

http://www.tkachenko.com/blog/archives/000106 .html

<w:pict>
    <v:shapetype id="_x0000_t75" ...>
    ... VML shape template definition ...
    </v:shapetype>
    <w:binData w:name="wordml://02000001.jpg">
    ... Base64 encoded image goes here ...
    </w:binData>
    <v:shape id="_x0000_i1025" type="#_x0000_t75" 
      style="width:212.4pt;height:159pt">
         <v:imagedata src="wordml://02000001.jpg" 
           o:title="Image title"/>
    </v:shape> 
</w:pict>

Autres conseils

Il est PHPWord projet pour manipuler MS Word à partir de PHP.

  

PHPWord est une bibliothèque écrite en PHP   qui créent des documents Word. pas de Windows   système d'exploitation est nécessaire pour une utilisation   parce que le résultat sont des fichiers docx   (Office Open XML) qui peut être ouvert   par tous les principaux logiciels de bureau.

PHPWord peut les écrire http://phpword.codeplex.com/ (note: son encore Beta. Je l'ai utilisé PHPExcel par le même gars beaucoup ... n'a jamais essayé la version Word).

Jetez un oeil à la bibliothèque de phpdocx pour générer des fichiers .docx réels plutôt que des fichiers html avec une extension .doc

PS l'extension doit être strictement .docx plutôt que .doc pour ouvrir des fichiers XML Word 2007

OpenTBS peut créer DOCX (et d'autres fichiers OpenXML) des documents dynamiques en PHP utilisant la technique de modèles.

Aucun temporaires nécessaires, aucune ligne de commande, tous en PHP.

Il peut ajouter ou images de suppression. Le document créé peut être produit en téléchargement HTML, un fichier enregistré sur le serveur, ou en tant que contenu binaire en PHP.

Il peut également fusionner des fichiers OpenDocument (ODT, ODS, ODF, ...)

http://www.tinybutstrong.com/opentbs.php

Si le texte riche est ok essayer PhpRtf .

J'utiliser PHPExcel. Il peut fonctionner avec OpenXML aussi.

Voici le lien: http://phpexcel.codeplex.com/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top