'package/2006/relationships/metadata/core-properties', 'docProps/app.xml' => 'officeDocument/2006/relationships/extended-properties', 'word/document.xml' => 'officeDocument/2006/relationships/officeDocument', ); $xmlWriter = $this->getXmlWriter(); $this->writeRels($xmlWriter, $xmlRels); return $xmlWriter->getData(); } /** * Write relationships * * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param null|array $xmlRels * @param null|array $mediaRels * @param integer $relId */ protected function writeRels(XMLWriter $xmlWriter, $xmlRels = null, $mediaRels = null, $relId = 1) { $xmlWriter->startDocument('1.0', 'UTF-8', 'yes'); $xmlWriter->startElement('Relationships'); $xmlWriter->writeAttribute('xmlns', self::RELS_BASE . 'package/2006/relationships'); // XML files relationships if (is_array($xmlRels)) { foreach ($xmlRels as $target => $type) { $this->writeRel($xmlWriter, $relId++, $type, $target); } } // Media relationships if (!is_null($mediaRels) && is_array($mediaRels)) { $mapping = array('image' => 'image', 'object' => 'oleObject', 'link' => 'hyperlink'); $targetPaths = array('image' => 'media/', 'object' => 'embeddings/'); foreach ($mediaRels as $mediaRel) { $mediaType = $mediaRel['type']; $type = array_key_exists($mediaType, $mapping) ? $mapping[$mediaType] : $mediaType; $target = array_key_exists($mediaType, $targetPaths) ? $targetPaths[$mediaType] : ''; $target .= $mediaRel['target']; $targetMode = ($type == 'hyperlink') ? 'External' : ''; $type = "officeDocument/2006/relationships/{$type}"; $this->writeRel($xmlWriter, $relId++, $type, $target, $targetMode); } } $xmlWriter->endElement(); // Relationships } /** * Write individual rels entry * * Format: * * * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param int $relId Relationship ID * @param string $type Relationship type * @param string $target Relationship target * @param string $targetMode Relationship target mode */ private function writeRel(XMLWriter $xmlWriter, $relId, $type, $target, $targetMode = '') { if ($type != '' && $target != '') { if (strpos($relId, 'rId') === false) { $relId = 'rId' . $relId; } $xmlWriter->startElement('Relationship'); $xmlWriter->writeAttribute('Id', $relId); $xmlWriter->writeAttribute('Type', self::RELS_BASE . $type); $xmlWriter->writeAttribute('Target', $target); if ($targetMode != '') { $xmlWriter->writeAttribute('TargetMode', $targetMode); } $xmlWriter->endElement(); } else { throw new Exception("Invalid parameters passed."); } } }