我正在尝试使用 PHP 将二进制数据作为图像加载到 Word 文档(Opem XML)中,以便以后与 XSLT 一起使用。
将 Word 文档作为 PHP ZipArchive 打开后,我能够成功地将图像加载到word/media文件夹中,并更新word/document.xml文件。但我无法更新word/rels/document.xml.rels文件中<Relationships/>
的。
我已经交叉检查了 xml 格式是否正确。
以下是我尝试使用的代码片段,
$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();
谁能建议我可能做错了什么?