Не удается обновить word / rels / document.xml.rels с помощью PHP ZipArchive - PullRequest
0 голосов
/ 24 июня 2010

Я пытаюсь загрузить двоичные данные в виде изображений в документы Word (Opem XML), используя PHP для дальнейшего использования с XSLT.

После открытия документа Word в виде ZipArchive PHP я могу загружать изображения впапка word / media успешно, а также обновите файл word / document.xml .Но я не могу обновить <Relationships/> в файле word / rels / document.xml.rels .

Я уже перепроверял 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();

Кто-нибудь может подсказать, что я могу делать неправильно?

1 Ответ

0 голосов
/ 05 июля 2010

При добавлении PNG вы также добавляете новый тип контента, поэтому вам необходимо установить его в [Content_Types] .xml. См. Можно ли добавить некоторые данные в документ Word? для получения более подробной информации.

...