getParentWriter()->getUseDiskCaching()) { $xmlWriter = new XMLWriter(XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); } else { $xmlWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); } $this->_document = $phpWord; // XML header $xmlWriter->startDocument('1.0', 'UTF-8', 'yes'); $xmlWriter->startElement('w:styles'); $xmlWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'); $xmlWriter->writeAttribute('xmlns:w', 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'); // Write DocDefaults $this->_writeDocDefaults($xmlWriter); // Write Style Definitions $styles = Style::getStyles(); // Write normal paragraph style $normalStyle = null; if (array_key_exists('Normal', $styles)) { $normalStyle = $styles['Normal']; } $xmlWriter->startElement('w:style'); $xmlWriter->writeAttribute('w:type', 'paragraph'); $xmlWriter->writeAttribute('w:default', '1'); $xmlWriter->writeAttribute('w:styleId', 'Normal'); $xmlWriter->startElement('w:name'); $xmlWriter->writeAttribute('w:val', 'Normal'); $xmlWriter->endElement(); if (!is_null($normalStyle)) { $this->_writeParagraphStyle($xmlWriter, $normalStyle); } $xmlWriter->endElement(); // Write other styles if (count($styles) > 0) { foreach ($styles as $styleName => $style) { if ($styleName == 'Normal') { continue; } if ($style instanceof Font) { $paragraphStyle = $style->getParagraphStyle(); $styleType = $style->getStyleType(); $type = ($styleType == 'title') ? 'paragraph' : 'character'; if (!is_null($paragraphStyle)) { $type = 'paragraph'; } $xmlWriter->startElement('w:style'); $xmlWriter->writeAttribute('w:type', $type); if ($styleType == 'title') { $arrStyle = explode('_', $styleName); $styleId = 'Heading' . $arrStyle[1]; $styleName = 'heading ' . $arrStyle[1]; $styleLink = 'Heading' . $arrStyle[1] . 'Char'; $xmlWriter->writeAttribute('w:styleId', $styleId); $xmlWriter->startElement('w:link'); $xmlWriter->writeAttribute('w:val', $styleLink); $xmlWriter->endElement(); } $xmlWriter->startElement('w:name'); $xmlWriter->writeAttribute('w:val', $styleName); $xmlWriter->endElement(); if (!is_null($paragraphStyle)) { // Point parent style to Normal $xmlWriter->startElement('w:basedOn'); $xmlWriter->writeAttribute('w:val', 'Normal'); $xmlWriter->endElement(); $this->_writeParagraphStyle($xmlWriter, $paragraphStyle); } $this->_writeTextStyle($xmlWriter, $style); $xmlWriter->endElement(); } elseif ($style instanceof Paragraph) { $xmlWriter->startElement('w:style'); $xmlWriter->writeAttribute('w:type', 'paragraph'); $xmlWriter->writeAttribute('w:customStyle', '1'); $xmlWriter->writeAttribute('w:styleId', $styleName); $xmlWriter->startElement('w:name'); $xmlWriter->writeAttribute('w:val', $styleName); $xmlWriter->endElement(); // Parent style $basedOn = $style->getBasedOn(); if (!is_null($basedOn)) { $xmlWriter->startElement('w:basedOn'); $xmlWriter->writeAttribute('w:val', $basedOn); $xmlWriter->endElement(); } // Next paragraph style $next = $style->getNext(); if (!is_null($next)) { $xmlWriter->startElement('w:next'); $xmlWriter->writeAttribute('w:val', $next); $xmlWriter->endElement(); } $this->_writeParagraphStyle($xmlWriter, $style); $xmlWriter->endElement(); } elseif ($style instanceof TableFull) { $xmlWriter->startElement('w:style'); $xmlWriter->writeAttribute('w:type', 'table'); $xmlWriter->writeAttribute('w:customStyle', '1'); $xmlWriter->writeAttribute('w:styleId', $styleName); $xmlWriter->startElement('w:name'); $xmlWriter->writeAttribute('w:val', $styleName); $xmlWriter->endElement(); $xmlWriter->startElement('w:uiPriority'); $xmlWriter->writeAttribute('w:val', '99'); $xmlWriter->endElement(); $this->_writeFullTableStyle($xmlWriter, $style); $xmlWriter->endElement(); } } } $xmlWriter->endElement(); // w:styles // Return return $xmlWriter->getData(); } private function _writeFullTableStyle(XMLWriter $xmlWriter = null, TableFull $style) { $brdSz = $style->getBorderSize(); $brdCol = $style->getBorderColor(); $bgColor = $style->getBgColor(); $cellMargin = $style->getCellMargin(); $bTop = (!is_null($brdSz[0])) ? true : false; $bLeft = (!is_null($brdSz[1])) ? true : false; $bRight = (!is_null($brdSz[2])) ? true : false; $bBottom = (!is_null($brdSz[3])) ? true : false; $bInsH = (!is_null($brdSz[4])) ? true : false; $bInsV = (!is_null($brdSz[5])) ? true : false; $borders = ($bTop || $bLeft || $bRight || $bBottom || $bInsH || $bInsV) ? true : false; $mTop = (!is_null($cellMargin[0])) ? true : false; $mLeft = (!is_null($cellMargin[1])) ? true : false; $mRight = (!is_null($cellMargin[2])) ? true : false; $mBottom = (!is_null($cellMargin[3])) ? true : false; $margins = ($mTop || $mLeft || $mRight || $mBottom) ? true : false; $xmlWriter->startElement('w:tblPr'); if ($margins) { $xmlWriter->startElement('w:tblCellMar'); if ($mTop) { echo $margins[0]; $xmlWriter->startElement('w:top'); $xmlWriter->writeAttribute('w:w', $cellMargin[0]); $xmlWriter->writeAttribute('w:type', 'dxa'); $xmlWriter->endElement(); } if ($mLeft) { $xmlWriter->startElement('w:left'); $xmlWriter->writeAttribute('w:w', $cellMargin[1]); $xmlWriter->writeAttribute('w:type', 'dxa'); $xmlWriter->endElement(); } if ($mRight) { $xmlWriter->startElement('w:right'); $xmlWriter->writeAttribute('w:w', $cellMargin[2]); $xmlWriter->writeAttribute('w:type', 'dxa'); $xmlWriter->endElement(); } if ($mBottom) { $xmlWriter->startElement('w:bottom'); $xmlWriter->writeAttribute('w:w', $cellMargin[3]); $xmlWriter->writeAttribute('w:type', 'dxa'); $xmlWriter->endElement(); } $xmlWriter->endElement(); } if ($borders) { $xmlWriter->startElement('w:tblBorders'); if ($bTop) { $xmlWriter->startElement('w:top'); $xmlWriter->writeAttribute('w:val', 'single'); $xmlWriter->writeAttribute('w:sz', $brdSz[0]); $xmlWriter->writeAttribute('w:color', $brdCol[0]); $xmlWriter->endElement(); } if ($bLeft) { $xmlWriter->startElement('w:left'); $xmlWriter->writeAttribute('w:val', 'single'); $xmlWriter->writeAttribute('w:sz', $brdSz[1]); $xmlWriter->writeAttribute('w:color', $brdCol[1]); $xmlWriter->endElement(); } if ($bRight) { $xmlWriter->startElement('w:right'); $xmlWriter->writeAttribute('w:val', 'single'); $xmlWriter->writeAttribute('w:sz', $brdSz[2]); $xmlWriter->writeAttribute('w:color', $brdCol[2]); $xmlWriter->endElement(); } if ($bBottom) { $xmlWriter->startElement('w:bottom'); $xmlWriter->writeAttribute('w:val', 'single'); $xmlWriter->writeAttribute('w:sz', $brdSz[3]); $xmlWriter->writeAttribute('w:color', $brdCol[3]); $xmlWriter->endElement(); } if ($bInsH) { $xmlWriter->startElement('w:insideH'); $xmlWriter->writeAttribute('w:val', 'single'); $xmlWriter->writeAttribute('w:sz', $brdSz[4]); $xmlWriter->writeAttribute('w:color', $brdCol[4]); $xmlWriter->endElement(); } if ($bInsV) { $xmlWriter->startElement('w:insideV'); $xmlWriter->writeAttribute('w:val', 'single'); $xmlWriter->writeAttribute('w:sz', $brdSz[5]); $xmlWriter->writeAttribute('w:color', $brdCol[5]); $xmlWriter->endElement(); } $xmlWriter->endElement(); } $xmlWriter->endElement(); if (!is_null($bgColor)) { $xmlWriter->startElement('w:tcPr'); $xmlWriter->startElement('w:shd'); $xmlWriter->writeAttribute('w:val', 'clear'); $xmlWriter->writeAttribute('w:color', 'auto'); $xmlWriter->writeAttribute('w:fill', $bgColor); $xmlWriter->endElement(); $xmlWriter->endElement(); } // First Row $firstRow = $style->getFirstRow(); if (!is_null($firstRow)) { $this->_writeRowStyle($xmlWriter, 'firstRow', $firstRow); } } private function _writeRowStyle(XMLWriter $xmlWriter = null, $type, TableFull $style) { $brdSz = $style->getBorderSize(); $brdCol = $style->getBorderColor(); $bgColor = $style->getBgColor(); $bTop = (!is_null($brdSz[0])) ? true : false; $bLeft = (!is_null($brdSz[1])) ? true : false; $bRight = (!is_null($brdSz[2])) ? true : false; $bBottom = (!is_null($brdSz[3])) ? true : false; $borders = ($bTop || $bLeft || $bRight || $bBottom) ? true : false; $xmlWriter->startElement('w:tblStylePr'); $xmlWriter->writeAttribute('w:type', $type); $xmlWriter->startElement('w:tcPr'); if (!is_null($bgColor)) { $xmlWriter->startElement('w:shd'); $xmlWriter->writeAttribute('w:val', 'clear'); $xmlWriter->writeAttribute('w:color', 'auto'); $xmlWriter->writeAttribute('w:fill', $bgColor); $xmlWriter->endElement(); } $xmlWriter->startElement('w:tcBorders'); if ($bTop) { $xmlWriter->startElement('w:top'); $xmlWriter->writeAttribute('w:val', 'single'); $xmlWriter->writeAttribute('w:sz', $brdSz[0]); $xmlWriter->writeAttribute('w:color', $brdCol[0]); $xmlWriter->endElement(); } if ($bLeft) { $xmlWriter->startElement('w:left'); $xmlWriter->writeAttribute('w:val', 'single'); $xmlWriter->writeAttribute('w:sz', $brdSz[1]); $xmlWriter->writeAttribute('w:color', $brdCol[1]); $xmlWriter->endElement(); } if ($bRight) { $xmlWriter->startElement('w:right'); $xmlWriter->writeAttribute('w:val', 'single'); $xmlWriter->writeAttribute('w:sz', $brdSz[2]); $xmlWriter->writeAttribute('w:color', $brdCol[2]); $xmlWriter->endElement(); } if ($bBottom) { $xmlWriter->startElement('w:bottom'); $xmlWriter->writeAttribute('w:val', 'single'); $xmlWriter->writeAttribute('w:sz', $brdSz[3]); $xmlWriter->writeAttribute('w:color', $brdCol[3]); $xmlWriter->endElement(); } $xmlWriter->endElement(); $xmlWriter->endElement(); $xmlWriter->endElement(); } private function _writeDocDefaults(XMLWriter $xmlWriter = null) { $fontName = $this->_document->getDefaultFontName(); $fontSize = $this->_document->getDefaultFontSize(); $xmlWriter->startElement('w:docDefaults'); $xmlWriter->startElement('w:rPrDefault'); $xmlWriter->startElement('w:rPr'); $xmlWriter->startElement('w:rFonts'); $xmlWriter->writeAttribute('w:ascii', $fontName); $xmlWriter->writeAttribute('w:hAnsi', $fontName); $xmlWriter->writeAttribute('w:eastAsia', $fontName); $xmlWriter->writeAttribute('w:cs', $fontName); $xmlWriter->endElement(); $xmlWriter->startElement('w:sz'); $xmlWriter->writeAttribute('w:val', $fontSize * 2); $xmlWriter->endElement(); $xmlWriter->startElement('w:szCs'); $xmlWriter->writeAttribute('w:val', $fontSize * 2); $xmlWriter->endElement(); $xmlWriter->endElement(); $xmlWriter->endElement(); $xmlWriter->endElement(); } }