/** * 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(); }
/** * 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__); }