/** * Create a new \PhpOffice\PhpPresentation\Style\Borders */ public function __construct() { // Initialise values $this->left = new Border(); $this->right = new Border(); $this->top = new Border(); $this->bottom = new Border(); $this->diagonalUp = new Border(); $this->diagonalUp->setLineStyle(Border::LINE_NONE); $this->diagonalDown = new Border(); $this->diagonalDown->setLineStyle(Border::LINE_NONE); }
/** * Create a new self */ public function __construct() { // Initialise values $this->container = null; $this->offsetX = 0; $this->offsetY = 0; $this->width = 0; $this->height = 0; $this->rotation = 0; $this->fill = new Style\Fill(); $this->border = new Style\Border(); $this->shadow = new Style\Shadow(); $this->border->setLineStyle(Style\Border::LINE_NONE); }
/** * Write Border * * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer * @param \PhpOffice\PhpPresentation\Style\Border $pBorder Border * @param string $pElementName Element name * @throws \Exception */ protected function writeBorder(XMLWriter $objWriter, $pBorder, $pElementName = 'L') { if (!$pBorder instanceof Border) { return; } if ($pBorder->getLineStyle() == Border::LINE_NONE && $pElementName == '') { return; } // Line style $lineStyle = $pBorder->getLineStyle(); if ($lineStyle == Border::LINE_NONE) { $lineStyle = Border::LINE_SINGLE; } // Line width $lineWidth = 12700 * $pBorder->getLineWidth(); // a:ln $pElementName $objWriter->startElement('a:ln' . $pElementName); $objWriter->writeAttribute('w', $lineWidth); $objWriter->writeAttribute('cap', 'flat'); $objWriter->writeAttribute('cmpd', $lineStyle); $objWriter->writeAttribute('algn', 'ctr'); // Fill? if ($pBorder->getLineStyle() == Border::LINE_NONE) { // a:noFill $objWriter->writeElement('a:noFill', null); } else { // a:solidFill $objWriter->startElement('a:solidFill'); $this->writeColor($objWriter, $pBorder->getColor()); $objWriter->endElement(); } // Dash $objWriter->startElement('a:prstDash'); $objWriter->writeAttribute('val', $pBorder->getDashStyle()); $objWriter->endElement(); // a:round $objWriter->writeElement('a:round', null); // a:headEnd $objWriter->startElement('a:headEnd'); $objWriter->writeAttribute('type', 'none'); $objWriter->writeAttribute('w', 'med'); $objWriter->writeAttribute('len', 'med'); $objWriter->endElement(); // a:tailEnd $objWriter->startElement('a:tailEnd'); $objWriter->writeAttribute('type', 'none'); $objWriter->writeAttribute('w', 'med'); $objWriter->writeAttribute('len', 'med'); $objWriter->endElement(); $objWriter->endElement(); }
/** * Test get/set line width */ public function testSetGetLineWidth() { $object = new Border(); $this->assertInstanceOf('PhpOffice\\PhpPresentation\\Style\\Border', $object->setLineWidth()); $this->assertEquals(1, $object->getLineWidth()); $value = rand(1, 100); $this->assertInstanceOf('PhpOffice\\PhpPresentation\\Style\\Border', $object->setLineWidth($value)); $this->assertEquals($value, $object->getLineWidth()); }
/** * 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__); }
/** * Write table * * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer * @param \PhpOffice\PhpPresentation\Shape\Table $shape * @param int $shapeId * @throws \Exception */ private function writeShapeTable(XMLWriter $objWriter, ShapeTable $shape, $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()); $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', CommonDrawing::pixelsToEmu($shape->getOffsetX())); $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY())); $objWriter->endElement(); // a:ext $objWriter->startElement('a:ext'); $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth())); $objWriter->writeAttribute('cy', CommonDrawing::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'); $objWriter->endElement(); // a:tblGrid $objWriter->startElement('a:tblGrid'); // Write cell widths $countCells = count($shape->getRow(0)->getCells()); for ($cell = 0; $cell < $countCells; $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', CommonDrawing::pixelsToEmu($width)); $objWriter->endElement(); } $objWriter->endElement(); // Colspan / rowspan containers $colSpan = array(); $rowSpan = array(); // Default border style $defaultBorder = new Border(); // Write rows $countRows = count($shape->getRows()); for ($row = 0; $row < $countRows; $row++) { // a:tr $objWriter->startElement('a:tr'); $objWriter->writeAttribute('h', CommonDrawing::pixelsToEmu($shape->getRow($row)->getHeight())); // Write cells $countCells = count($shape->getRow($row)->getCells()); for ($cell = 0; $cell < $countCells; $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; } elseif (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; } elseif (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); $verticalAlign = $firstParagraph->getAlignment()->getVertical(); if ($verticalAlign != Alignment::VERTICAL_BASE && $verticalAlign != Alignment::VERTICAL_AUTO) { $objWriter->writeAttribute('anchor', $verticalAlign); } // 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(); }