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?
Vous ne dites pas ce qui se passe (ou pas) exactement. Le fichier est-il inchangé? –
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 –