------------------------------------------------------------------------------- $Id$ -----------------------------------------------------------------------------*/ require_once 'MECON/PDF/Marco.php'; /** * Libreria que permite agregar una tabla a un pdf. */ class MECON_PDF_Tabla extends MECON_PDF_Marco { /** * Funcion que envia el archivo a pantalla (para que el usuario haga un * download) * * @return string * @access public */ function display() { if ($this->getRowCount()) { $this->_agregarContenido(); } else { $this->_pdf->newPage($this->_tamanio); $this->_pdf->addText($this->_config['Xi'], $this->_config['contenido']['Y'], 'No hay contenido para mostrar.', $this->_config['contenido']); $this->buildPage(); } $this->_pdf->display(); } /** * Funcion que devuelve el estilo de la celda segun la configuracion. * * @param int $row Indicador de la fila * @param int $col Indicador de la columna * * @return array * @access protected */ function _obtenerEstiloCelda($row, $col) { $clase = $this->getCellAttributes($row, $col); switch ($clase['class']) { case 'mecon_html_tabla_comun_cabecera': $estilo = $this->_config['celda_cabecera']; break; case 'mecon_html_tabla_comun_titulo': $estilo = $this->_config['celda_titulo']; break; default : $estilo = $this->_config['celda_comun']; break; } return $estilo; } /** * Funcion que agrega las filas y columnas a la pagina. * * @return void * @access protected */ function _agregarContenido() { //Calculo el ancho de la columnas basandome en el ancho que tienen las //mismas en la primer fila {{{ $ancho_pagina = abs($this->_config['Xf'] - $this->_config['Xi']) ; for ($i=0; $i<$this->getColCount(); $i++ ) { $tmp = $this->getCellAttributes(0,$i); if (is_null(@$tmp['width'])) { die ('Todas las columnas deben tener asignado un ancho.'); } $attr[$i] = intval($tmp['width']); } $tmp = array_sum($attr); $attr2[0] = $this->_config['Xi']; for ($i=1; $i_config['Xf']; ///}}} $this->_pdf->newPage($this->_tamanio); $alto = $this->_getAvailableSpace($this->_pdf->numPage()); for ($i = 0; $i < $this->getRowCount(); $i++) { $max = 0; for ($j = 0; $j < $this->getColCount(); $j++) { $estilo = $this->_obtenerEstiloCelda($i, $j); $txt = $this->_pdf->wordWrap($this->getCellContents($i,$j), $attr2[$j+1] - $attr2[$j], $estilo); $max = max($estilo['alto_linea'] * count($txt), $max); } $alto -= $max; if ($alto < $this->_config['Yi']) { $this->_pdf->newPage($this->_tamanio); $alto = $this->_getAvailableSpace($this->_pdf->numPage()); } for ($j = 0; $j < $this->getColCount(); $j++) { $estilo = $this->_obtenerEstiloCelda($i, $j); $this->_pdf->addRectangle($alto, $attr2[$j], $alto+$max, $attr2[$j+1], @$estilo['fill']); $txt = $this->_pdf->wordWrap($this->getCellContents($i,$j), $attr2[$j+1] - $attr2[$j], $estilo); $alto1 = $alto + $max; foreach ($txt as $t) { $alto1 -= $estilo['alto_linea']; $this->_pdf->addText($attr2[$j] + 1, $alto1 + 1, $t, $estilo); } } } $t = true; foreach ($this->_pdf->getPages() as $page) { $this->_pdf->_pagina_actual = $page; $this->buildPage($t, $t); $t = false; } } } ?>