Beispiel #1
0
 function _tableWrite(&$table)
 {
     //! @desc Main table function
     //! @return void
     $cells =& $table['cells'];
     $numcols = $table['nc'];
     $numrows = $table['nr'];
     $x0 = $this->x;
     $y0 = $this->y;
     $right = $this->pgwidth - $this->rMargin;
     if (isset($table['a']) and $table['w'] != $this->pgwidth) {
         if ($table['a'] == 'C') {
             $x0 += ($right - $x0 - $table['w']) / 2;
         } elseif ($table['a'] == 'R') {
             $x0 = $right - $table['w'];
         }
     }
     $returny = 0;
     $tableheader = array();
     //Draw Table Contents and Borders
     for ($i = 0; $i < $numrows; $i++) {
         $skippage = false;
         for ($j = 0; $j < $numcols; $j++) {
             if (isset($cells[$i][$j]) && $cells[$i][$j]) {
                 $cell =& $cells[$i][$j];
                 list($x, $w) = $this->_tableGetWidth($table, $i, $j);
                 list($y, $h) = $this->_tableGetHeight($table, $i, $j);
                 $x += $x0;
                 $y += $y0;
                 $y -= $returny;
                 if ($y + $h > $this->fh - $this->bMargin && ($y0 > 0 || $x0 > 0)) {
                     if (!$skippage) {
                         $y -= $y0;
                         $returny += $y;
                         $this->AddPage();
                         if ($this->usetableheader) {
                             $this->Header($tableheader);
                         }
                         if ($this->usetableheader) {
                             $y0 = $this->y;
                         } else {
                             $y0 = $this->tMargin;
                         }
                         $y = $y0;
                     }
                     $skippage = true;
                 }
                 //Align
                 $this->x = $x;
                 $this->y = $y;
                 $align = isset($cell['a']) ? $cell['a'] : 'L';
                 //Vertical align
                 if (!isset($cell['va']) || $cell['va'] == 'M') {
                     $this->y += ($h - $cell['mih']) / 2;
                 } elseif (isset($cell['va']) && $cell['va'] == 'B') {
                     $this->y += $h - $cell['mih'];
                 }
                 //Fill
                 $fill = isset($cell['bgcolor']) ? $cell['bgcolor'] : (isset($table['bgcolor'][$i]) ? $table['bgcolor'][$i] : (isset($table['bgcolor'][-1]) ? $table['bgcolor'][-1] : 0));
                 if ($fill) {
                     $color = ConvertColor($fill);
                     $this->SetFillColor($color['R'], $color['G'], $color['B']);
                     $this->Rect($x, $y, $w, $h, 'F');
                 }
                 //Border
                 if (isset($cell['border'])) {
                     $this->_tableRect($x, $y, $w, $h, $cell['border']);
                 } elseif (isset($table['border']) && $table['border']) {
                     $this->Rect($x, $y, $w, $h);
                 }
                 $this->divalign = $align;
                 $this->divwidth = $w - 2;
                 //Get info of first row == table header
                 if ($this->usetableheader and $i == 0) {
                     $tableheader[$j]['x'] = $x;
                     $tableheader[$j]['y'] = $y;
                     $tableheader[$j]['h'] = $h;
                     $tableheader[$j]['w'] = $w;
                     $tableheader[$j]['text'] = $cell['text'];
                     $tableheader[$j]['textbuffer'] = $cell['textbuffer'];
                     $tableheader[$j]['a'] = isset($cell['a']) ? $cell['a'] : 'L';
                     $tableheader[$j]['va'] = $cell['va'];
                     $tableheader[$j]['mih'] = $cell['mih'];
                     $tableheader[$j]['bgcolor'] = $fill;
                     if ($table['border']) {
                         $tableheader[$j]['border'] = 'all';
                     } elseif (isset($cell['border'])) {
                         $tableheader[$j]['border'] = $cell['border'];
                     }
                 }
                 if (!empty($cell['textbuffer'])) {
                     $this->printbuffer($cell['textbuffer'], false, true);
                 }
                 //Reset values
                 $this->Reset();
             }
             //end of (if isset(cells)...)
         }
         // end of columns
         if ($i == $numrows - 1) {
             $this->y = $y + $h;
         }
         //last row jump (update this->y position)
     }
     // end of rows
 }
Beispiel #2
0
 function _tableWrite(&$table)
 {
     //EDITEI
     //! @return void
     $cs =& $table['cells'];
     $nc = $table['nc'];
     $nr = $table['nr'];
     $x0 = $this->x;
     $y0 = $this->y;
     $right = $this->pgwidth - $this->rMargin;
     if (isset($table['a']) and $table['w'] != $this->pgwidth) {
         if ($table['a'] == 'C') {
             $x0 += ($right - $x0 - $table['w']) / 2;
         } elseif ($table['a'] == 'R') {
             $x0 = $right - $table['w'];
         }
     }
     $returny = 0;
     //Draw Table Contents and Borders
     for ($i = 0; $i < $nr; $i++) {
         //rows
         $skippage = false;
         for ($j = 0; $j < $nc; $j++) {
             //columns
             if (isset($cs[$i][$j]) && $cs[$i][$j]) {
                 $c =& $cs[$i][$j];
                 list($x, $w) = $this->_tableGetWidth($table, $i, $j);
                 list($y, $h) = $this->_tableGetHeight($table, $i, $j);
                 $x += $x0;
                 $y += $y0;
                 $y -= $returny;
                 if ($y + $h > $this->fh - $this->bMargin && ($y0 > 0 || $x0 > 0)) {
                     if (!$skippage) {
                         $y -= $y0;
                         $returny += $y;
                         $this->AddPage();
                         $y0 = $this->tMargin;
                         $y = $y0;
                     }
                     $skippage = true;
                 }
                 //Align
                 $this->x = $x;
                 $this->y = $y;
                 $align = isset($c['a']) ? $c['a'] : 'L';
                 //Vertical align
                 if (!isset($c['va']) || $c['va'] == 'M') {
                     $this->y += ($h - $c['mih']) / 2;
                 } elseif (isset($c['va']) && $c['va'] == 'B') {
                     $this->y += $h - $c['mih'];
                 }
                 //Fill
                 $fill = isset($c['bgcolor']) ? $c['bgcolor'] : (isset($table['bgcolor'][$i]) ? $table['bgcolor'][$i] : (isset($table['bgcolor'][-1]) ? $table['bgcolor'][-1] : 0));
                 if ($fill) {
                     $color = ConvertColor($fill);
                     $this->SetFillColor($color['R'], $color['G'], $color['B']);
                     $this->Rect($x, $y, $w, $h, 'F');
                 }
                 //Border
                 if (isset($c['border'])) {
                     $this->_tableRect($x, $y, $w, $h, $c['border']);
                 } elseif (isset($table['border']) && $table['border']) {
                     $this->Rect($x, $y, $w, $h);
                 }
                 //Content (EDITEI - now accepts bold italic underline inside table!)
                 $c['text'] = implode("", $c['text']);
                 //BUG?
                 //WORDWRAP eliminates some spaces creating differences between text and textbuffer?!?
                 //paliative fix: if w == pgwidth dont call WordWrap, let it wordwrap automatically
                 if ($w != $this->pgwidth) {
                     $this->WordWrap($c['text'], $w - 2);
                 }
                 // -2 to leave a small margin
                 $this->divalign = $align;
                 $this->divwidth = $w;
                 $this->divheight = $this->FontSizePt / 2;
                 if (!empty($c['textbuffer'])) {
                     $this->printbuffer($c['textbuffer'], true, $c['text']);
                 }
                 $this->divalign = 'L';
                 $this->divwidth = 0;
                 $this->divheight = 0;
             }
             //end of (if isset...)
         }
         // end of cols
         if ($i == $nr - 1) {
             $this->y = $y + $h;
         }
         //last row jump (update this->y position)
     }
     // end of rows
 }