コード例 #1
0
ファイル: Document.php プロジェクト: kaantunc/MYK-BOR
 /**
  * Read w:tbl
  *
  * @param mixed $parent
  * @param string $docPart
  */
 private function readTable(XMLReader $xmlReader, \DOMElement $domNode, &$parent, $docPart)
 {
     // Table style
     $tblStyle = null;
     if ($xmlReader->elementExists('w:tblPr', $domNode)) {
         $tblStyle = $this->readTableStyle($xmlReader, $domNode);
     }
     $table = $parent->addTable($tblStyle);
     $tblNodes = $xmlReader->getElements('*', $domNode);
     foreach ($tblNodes as $tblNode) {
         if ($tblNode->nodeName == 'w:tblGrid') {
             // Column
             // @todo Do something with table columns
         } elseif ($tblNode->nodeName == 'w:tr') {
             // Row
             $rowHeight = $xmlReader->getAttribute('w:val', $tblNode, 'w:trPr/w:trHeight');
             $rowHRule = $xmlReader->getAttribute('w:hRule', $tblNode, 'w:trPr/w:trHeight');
             $rowHRule = $rowHRule == 'exact' ? true : false;
             $rowStyle = array('tblHeader' => $xmlReader->elementExists('w:trPr/w:tblHeader', $tblNode), 'cantSplit' => $xmlReader->elementExists('w:trPr/w:cantSplit', $tblNode), 'exactHeight' => $rowHRule);
             $row = $table->addRow($rowHeight, $rowStyle);
             $rowNodes = $xmlReader->getElements('*', $tblNode);
             foreach ($rowNodes as $rowNode) {
                 if ($rowNode->nodeName == 'w:trPr') {
                     // Row style
                     // @todo Do something with row style
                 } elseif ($rowNode->nodeName == 'w:tc') {
                     // Cell
                     $cellWidth = $xmlReader->getAttribute('w:w', $rowNode, 'w:tcPr/w:tcW');
                     $cellStyle = null;
                     $cellStyleNode = $xmlReader->getElement('w:tcPr', $rowNode);
                     if (!is_null($cellStyleNode)) {
                         $cellStyle = $this->readCellStyle($xmlReader, $cellStyleNode);
                     }
                     $cell = $row->addCell($cellWidth, $cellStyle);
                     $cellNodes = $xmlReader->getElements('*', $rowNode);
                     foreach ($cellNodes as $cellNode) {
                         if ($cellNode->nodeName == 'w:p') {
                             // Paragraph
                             $this->readParagraph($xmlReader, $cellNode, $cell, $docPart);
                         }
                     }
                 }
             }
         }
     }
 }
コード例 #2
0
 /**
  * Read style definition
  *
  * @param \PhpOffice\PhpWord\Shared\XMLReader $xmlReader
  * @param \DOMElement $parentNode
  * @param array $styleDefs
  * @ignoreScrutinizerPatch
  * @return array
  */
 protected function readStyleDefs(XMLReader $xmlReader, \DOMElement $parentNode = null, $styleDefs = array())
 {
     $styles = array();
     foreach ($styleDefs as $styleProp => $styleVal) {
         @(list($method, $element, $attribute, $expected) = $styleVal);
         if ($xmlReader->elementExists($element, $parentNode)) {
             $node = $xmlReader->getElement($element, $parentNode);
             // Use w:val as default if no attribute assigned
             $attribute = $attribute === null ? 'w:val' : $attribute;
             $attributeValue = $xmlReader->getAttribute($attribute, $node);
             $styleValue = $this->readStyleDef($method, $attributeValue, $expected);
             if ($styleValue !== null) {
                 $styles[$styleProp] = $styleValue;
             }
         }
     }
     return $styles;
 }
コード例 #3
0
ファイル: AbstractPart.php プロジェクト: kaantunc/MYK-BOR
 /**
  * Read w:tblPr
  *
  * @return string|array|null
  * @todo Capture w:tblStylePr w:type="firstRow"
  */
 protected function readTableStyle(XMLReader $xmlReader, \DOMElement $domNode)
 {
     $style = null;
     $margins = array('top', 'left', 'bottom', 'right');
     $borders = $margins + array('insideH', 'insideV');
     if ($xmlReader->elementExists('w:tblPr', $domNode)) {
         if ($xmlReader->elementExists('w:tblPr/w:tblStyle', $domNode)) {
             $style = $xmlReader->getAttribute('w:val', $domNode, 'w:tblPr/w:tblStyle');
         } else {
             $style = array();
             $mapping = array('w:tblCellMar' => 'cellMargin', 'w:tblBorders' => 'border');
             $nodes = $xmlReader->getElements('w:tblPr/*', $domNode);
             foreach ($nodes as $node) {
                 if (!array_key_exists($node->nodeName, $mapping)) {
                     continue;
                 }
                 // $property = $mapping[$node->nodeName];
                 switch ($node->nodeName) {
                     case 'w:tblCellMar':
                         foreach ($margins as $side) {
                             $ucfSide = ucfirst($side);
                             $style["cellMargin{$ucfSide}"] = $xmlReader->getAttribute('w:w', $node, "w:{$side}");
                         }
                         break;
                     case 'w:tblBorders':
                         foreach ($borders as $side) {
                             $ucfSide = ucfirst($side);
                             $style["border{$ucfSide}Size"] = $xmlReader->getAttribute('w:sz', $node, "w:{$side}");
                             $style["border{$ucfSide}Color"] = $xmlReader->getAttribute('w:color', $node, "w:{$side}");
                         }
                         break;
                 }
             }
         }
     }
     return $style;
 }