示例#1
0
 /**
  * Write table
  *
  * @param	PHPPowerPoint_Shared_XMLWriter		$objWriter		XML Writer
  * @param	PHPPowerPoint_Shape_Table    		$shape
  * @param	int									$shapeId
  * @throws	Exception
  */
 private function _writeTable(PHPPowerPoint_Shared_XMLWriter $objWriter = null, PHPPowerPoint_Shape_Table $shape = null, $shapeId)
 {
     // p:graphicFrame
     $objWriter->startElement('p:graphicFrame');
     // p:nvGraphicFramePr
     $objWriter->startElement('p:nvGraphicFramePr');
     // p:cNvPr
     $objWriter->startElement('p:cNvPr');
     $objWriter->writeAttribute('id', $shapeId);
     $objWriter->writeAttribute('name', $shape->getName());
     $objWriter->writeAttribute('descr', $shape->getDescription());
     // a:hlinkClick
     if ($shape->hasHyperlink()) {
         $this->_writeHyperlink($objWriter, $shape);
     }
     $objWriter->endElement();
     // p:cNvGraphicFramePr
     $objWriter->startElement('p:cNvGraphicFramePr');
     // a:graphicFrameLocks
     $objWriter->startElement('a:graphicFrameLocks');
     $objWriter->writeAttribute('noGrp', '1');
     $objWriter->endElement();
     $objWriter->endElement();
     // p:nvPr
     $objWriter->writeElement('p:nvPr', null);
     $objWriter->endElement();
     // p:xfrm
     $objWriter->startElement('p:xfrm');
     // a:off
     $objWriter->startElement('a:off');
     $objWriter->writeAttribute('x', PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getOffsetX()));
     $objWriter->writeAttribute('y', PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getOffsetY()));
     $objWriter->endElement();
     // a:ext
     $objWriter->startElement('a:ext');
     $objWriter->writeAttribute('cx', PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getWidth()));
     $objWriter->writeAttribute('cy', PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getHeight()));
     $objWriter->endElement();
     $objWriter->endElement();
     // a:graphic
     $objWriter->startElement('a:graphic');
     // a:graphicData
     $objWriter->startElement('a:graphicData');
     $objWriter->writeAttribute('uri', 'http://schemas.openxmlformats.org/drawingml/2006/table');
     // a:tbl
     $objWriter->startElement('a:tbl');
     // a:tblPr
     $objWriter->startElement('a:tblPr');
     $objWriter->writeAttribute('firstRow', '1');
     $objWriter->writeAttribute('bandRow', '1');
     if ($shape->getShadow()->getVisible()) {
         // a:effectLst
         $objWriter->startElement('a:effectLst');
         // a:outerShdw
         $objWriter->startElement('a:outerShdw');
         $objWriter->writeAttribute('blurRad', PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getShadow()->getBlurRadius()));
         $objWriter->writeAttribute('dist', PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getShadow()->getDistance()));
         $objWriter->writeAttribute('dir', PHPPowerPoint_Shared_Drawing::degreesToAngle($shape->getShadow()->getDirection()));
         $objWriter->writeAttribute('algn', $shape->getShadow()->getAlignment());
         $objWriter->writeAttribute('rotWithShape', '0');
         // a:srgbClr
         $objWriter->startElement('a:srgbClr');
         $objWriter->writeAttribute('val', $shape->getShadow()->getColor()->getRGB());
         // a:alpha
         $objWriter->startElement('a:alpha');
         $objWriter->writeAttribute('val', $shape->getShadow()->getAlpha() * 1000);
         $objWriter->endElement();
         $objWriter->endElement();
         $objWriter->endElement();
         $objWriter->endElement();
     }
     $objWriter->endElement();
     // a:tblGrid
     $objWriter->startElement('a:tblGrid');
     // Write cell widths
     for ($cell = 0; $cell < count($shape->getRow(0)->getCells()); $cell++) {
         // a:gridCol
         $objWriter->startElement('a:gridCol');
         // Calculate column width
         $width = $shape->getRow(0)->getCell($cell)->getWidth();
         if ($width == 0) {
             $colCount = count($shape->getRow(0)->getCells());
             $totalWidth = $shape->getWidth();
             $width = $totalWidth / $colCount;
         }
         $objWriter->writeAttribute('w', PHPPowerPoint_Shared_Drawing::pixelsToEMU($width));
         $objWriter->endElement();
     }
     $objWriter->endElement();
     // Colspan / rowspan containers
     $colSpan = array();
     $rowSpan = array();
     // Default border style
     $defaultBorder = new PHPPowerPoint_Style_Border();
     // Write rows
     for ($row = 0; $row < count($shape->getRows()); $row++) {
         // a:tr
         $objWriter->startElement('a:tr');
         $objWriter->writeAttribute('h', PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getRow($row)->getHeight()));
         // Write cells
         for ($cell = 0; $cell < count($shape->getRow($row)->getCells()); $cell++) {
             // Current cell
             $currentCell = $shape->getRow($row)->getCell($cell);
             // Next cell right
             $nextCellRight = $shape->getRow($row)->getCell($cell + 1, true);
             // Next cell below
             $nextRowBelow = $shape->getRow($row + 1, true);
             $nextCellBelow = null;
             if ($nextRowBelow != null) {
                 $nextCellBelow = $nextRowBelow->getCell($cell, true);
             }
             // a:tc
             $objWriter->startElement('a:tc');
             // Colspan
             if ($currentCell->getColSpan() > 1) {
                 $objWriter->writeAttribute('gridSpan', $currentCell->getColSpan());
                 $colSpan[$row] = $currentCell->getColSpan() - 1;
             } else {
                 if (isset($colSpan[$row]) && $colSpan[$row] > 0) {
                     $colSpan[$row]--;
                     $objWriter->writeAttribute('hMerge', '1');
                 }
             }
             // Rowspan
             if ($currentCell->getRowSpan() > 1) {
                 $objWriter->writeAttribute('rowSpan', $currentCell->getRowSpan());
                 $rowSpan[$cell] = $currentCell->getRowSpan() - 1;
             } else {
                 if (isset($rowSpan[$cell]) && $rowSpan[$cell] > 0) {
                     $rowSpan[$cell]--;
                     $objWriter->writeAttribute('vMerge', '1');
                 }
             }
             // a:txBody
             $objWriter->startElement('a:txBody');
             // a:bodyPr
             $objWriter->startElement('a:bodyPr');
             $objWriter->writeAttribute('wrap', 'square');
             $objWriter->writeAttribute('rtlCol', '0');
             // a:spAutoFit
             $objWriter->writeElement('a:spAutoFit', null);
             $objWriter->endElement();
             // a:lstStyle
             $objWriter->writeElement('a:lstStyle', null);
             // Write paragraphs
             $this->_writeParagraphs($objWriter, $currentCell->getParagraphs());
             $objWriter->endElement();
             // a:tcPr
             $objWriter->startElement('a:tcPr');
             // Alignment (horizontal)
             $firstParagraph = $currentCell->getParagraph(0);
             $horizontalAlign = $firstParagraph->getAlignment()->getVertical();
             if ($horizontalAlign != PHPPowerPoint_Style_Alignment::VERTICAL_BASE && $horizontalAlign != PHPPowerPoint_Style_Alignment::VERTICAL_AUTO) {
                 $objWriter->writeAttribute('anchor', $horizontalAlign);
             }
             // Determine borders
             $borderLeft = $currentCell->getBorders()->getLeft();
             $borderRight = $currentCell->getBorders()->getRight();
             $borderTop = $currentCell->getBorders()->getTop();
             $borderBottom = $currentCell->getBorders()->getBottom();
             $borderDiagonalDown = $currentCell->getBorders()->getDiagonalDown();
             $borderDiagonalUp = $currentCell->getBorders()->getDiagonalUp();
             // Fix PowerPoint implementation
             if (!is_null($nextCellRight) && $nextCellRight->getBorders()->getRight()->getHashCode() != $defaultBorder->getHashCode()) {
                 $borderRight = $nextCellRight->getBorders()->getLeft();
             }
             if (!is_null($nextCellBelow) && $nextCellBelow->getBorders()->getBottom()->getHashCode() != $defaultBorder->getHashCode()) {
                 $borderBottom = $nextCellBelow->getBorders()->getTop();
             }
             // Write borders
             $this->_writeBorder($objWriter, $borderLeft, 'L');
             $this->_writeBorder($objWriter, $borderRight, 'R');
             $this->_writeBorder($objWriter, $borderTop, 'T');
             $this->_writeBorder($objWriter, $borderBottom, 'B');
             $this->_writeBorder($objWriter, $borderDiagonalDown, 'TlToBr');
             $this->_writeBorder($objWriter, $borderDiagonalUp, 'BlToTr');
             // Fill
             $this->_writeFill($objWriter, $currentCell->getFill());
             $objWriter->endElement();
             $objWriter->endElement();
         }
         $objWriter->endElement();
     }
     $objWriter->endElement();
     $objWriter->endElement();
     $objWriter->endElement();
     $objWriter->endElement();
 }
示例#2
0
 /**
  * Get hash code
  *
  * @return string	Hash code
  */
 public function getHashCode()
 {
     return md5($this->_position . $this->_offsetX . $this->_offsetY . $this->_width . $this->_height . $this->_font->getHashCode() . $this->_border->getHashCode() . $this->_fill->getHashCode() . $this->_alignment->getHashCode() . ($this->_visible ? 't' : 'f') . __CLASS__);
 }