2010-06-24 12 views
0

J'essaie de charger des données binaires en tant qu'images dans des documents Word (Opem XML) en utilisant PHP pour une utilisation ultérieure avec XSLT.Impossible de mettre à jour word/rels/document.xml.rels en utilisant PHP ZipArchive

Après avoir ouvert le document Word comme PHP ZipArchive, je suis capable de charger des images dans le mot/media dossier et mettre à jour également avec succès le mot/document.xml fichier. Mais je suis incapable de mettre à jour le <Relationships/> dans le fichier word/rels/document.xml.rels.

J'ai déjà vérifié que le format xml est correct.

qui suit est l'extrait de code que je suis en train d'utiliser,

 $zipArchive=new ZipArchive(); 
    $zipArchive->open($pathToDoc); 
    $imagePre="image"; 
    $relIdPre="rId"; 
    $index=100; 

    $nodeList = $reportDOM->getElementsByTagName("Node"); 
    $i=0; 

    foreach($nodeList as $node) { 
     $divList = $node->getElementsByTagName("*"); 

     foreach ($divList as $divNode) { 
      if (strncasecmp($divNode->nodeName, "wizChart", 8) == 0) { 
       $imgData=$divNode->getAttribute("src"); 
       $imgData=base64_decode(substr($imgData,22)); 

        $zipArchive-> 
addFromString("word/media/".$imagePre."".$index.".png",$imgData); 
       $fp=$zipArchive->getStream("word/_rels/document.xml.rels"); 

       $contents=''; 
       while (!feof($fp)) { 
        $contents .= fread($fp, 2); 
       } 
       $serviceOutput=new DOMDocument(); 
       $serviceOutput->loadXML($contents); 
       $serviceList=$serviceOutput->getElementsByTagName("Relationships"); 

       $element=$serviceOutput->createElement("Relationship"); 
       $element->setAttribute("Id",$relIdPre."".$index); 
       $element->setAttribute("Type","http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"); 
       $element->setAttribute("Target","word/media/".$imagePre."".$index.".png"); 

       foreach ($serviceList as $serviceNode) { 
       $serviceNode->appendChild($element); 
       } 

       $zipArchive->addEmptyDir("word/_rels/"); 
       $zipArchive->addFromString("word/_rels/document.xml.rels", $serviceOutput->saveXML()); 
       $index++; 
      }  
     } 
    } 
    $zipArchive->close(); 

Quelqu'un pourrait-il suggérer ce que je pourrais faire mal?

+0

Vous ne dites pas ce qui se passe (ou pas) exactement. Le fichier est-il inchangé? –

+0

Si je commente la partie essayant d'ajouter des nœuds xml au fichier docmuents.xml.rels, les images sont enregistrées dans le document Word. Mais, si j'essaie d'ajouter ces relations au fichier .rels, même les images ne sont pas sauvegardées. J'utilise le code PHP mentionné dans le lien ci-dessous, http://msdn.microsoft.com/en-us/library/ee840137(office.12).aspx et essayer d'ajouter des images au $ outputDocument avant d'appliquer $ newContent à word/document.xml –

Répondre

0

Vous ajoutez également un nouveau type de contenu lorsque vous ajoutez le fichier PNG, vous devez donc le définir dans [Content_Types] .xml. Voir Is it possible to add some data to a Word document? pour plus de détails.

+0

Merci pour l'article, mais il y a déjà le type de contenu PNG dans [Content-Types] .xml. Comme je l'ai déjà dit, je suis capable d'ajouter des images au document Word. Je suis incapable d'ajouter des relations au fichier _rels/document.xml.rels. Le code ne fonctionne pas uniquement lorsque j'essaie d'ajouter des relations. Si je commente cette partie, je peux ajouter des images au document. –