/**
  * Renders table cell with padding.
  *
  * @param array  $row
  * @param int    $column
  * @param string $cellFormat
  */
 private function renderCell(array $row, $column, $cellFormat)
 {
     $cell = isset($row[$column]) ? $row[$column] : '';
     $width = $this->getColumnWidth($column);
     // str_pad won't work properly with multi-byte strings, we need to fix the padding
     if (function_exists('mb_strwidth') && false !== ($encoding = mb_detect_encoding($cell))) {
         $width += strlen($cell) - mb_strwidth($cell, $encoding);
     }
     $width += Helper::strlen($cell) - Helper::strlenWithoutDecoration($this->output->getFormatter(), $cell);
     $content = sprintf($this->style->getCellRowContentFormat(), $cell);
     $this->output->write(sprintf($cellFormat, str_pad($content, $width, $this->style->getPaddingChar(), $this->style->getPadType())));
 }
 /**
  * Gets column width.
  *
  * @param int $column
  *
  * @return int
  */
 private function calculateColumnsWidth($rows)
 {
     for ($column = 0; $column < $this->numberOfColumns; ++$column) {
         $lengths = array();
         foreach ($rows as $row) {
             if ($row instanceof TableSeparator) {
                 continue;
             }
             $lengths[] = $this->getCellWidth($row, $column);
         }
         $this->columnWidths[$column] = max($lengths) + strlen($this->style->getCellRowContentFormat()) - 2;
     }
 }
Exemple #3
0
 /**
  * Gets column width.
  *
  * @param int $column
  *
  * @return int
  */
 private function getColumnWidth($column)
 {
     if (isset($this->columnWidths[$column])) {
         return $this->columnWidths[$column];
     }
     foreach (array_merge($this->headers, $this->rows) as $row) {
         if ($row instanceof TableSeparator) {
             continue;
         }
         $lengths[] = $this->getCellWidth($row, $column);
     }
     return $this->columnWidths[$column] = max($lengths) + strlen($this->style->getCellRowContentFormat()) - 2;
 }
Exemple #4
0
 /**
  * Calculates columns widths.
  *
  * @param array $rows
  */
 private function calculateColumnsWidth($rows)
 {
     for ($column = 0; $column < $this->numberOfColumns; ++$column) {
         $lengths = array();
         foreach ($rows as $row) {
             if ($row instanceof TableSeparator) {
                 continue;
             }
             foreach ($row as $i => $cell) {
                 if ($cell instanceof TableCell) {
                     $textLength = strlen($cell);
                     if ($textLength > 0) {
                         $contentColumns = str_split($cell, ceil($textLength / $cell->getColspan()));
                         foreach ($contentColumns as $position => $content) {
                             $row[$i + $position] = $content;
                         }
                     }
                 }
             }
             $lengths[] = $this->getCellWidth($row, $column);
         }
         $this->columnWidths[$column] = max($lengths) + strlen($this->style->getCellRowContentFormat()) - 2;
     }
 }
Exemple #5
0
 /**
  * Gets column width.
  *
  * @param int $column
  *
  * @return int
  */
 private function getColumnWidth($column)
 {
     if (isset($this->columnWidths[$column])) {
         return $this->columnWidths[$column];
     }
     foreach (array_merge($this->headers, $this->rows) as $row) {
         if ($row instanceof TableSeparator) {
             continue;
         }
         foreach ($row as $i => $cell) {
             if ($cell instanceof TableCell) {
                 $textLength = strlen($cell);
                 if ($textLength > 0) {
                     $contentColumns = str_split($cell, ceil($textLength / $cell->getColspan()));
                     foreach ($contentColumns as $position => $content) {
                         $row[$i + $position] = $content;
                     }
                 }
             }
         }
         $lengths[] = $this->getCellWidth($row, $column);
     }
     return $this->columnWidths[$column] = max($lengths) + strlen($this->style->getCellRowContentFormat()) - 2;
 }
Exemple #6
0
 private function getHiddenCellWidth()
 {
     return strlen($this->hiddenContent) + strlen($this->style->getCellRowContentFormat()) - 2;
 }