X-Git-Url: https://git.llucax.com/mecon/meconlib.git/blobdiff_plain/f82ac09838f49891a683ca0cf345adf06b5e75f9..1aa774a935f76496935ec5b00c00dcef4cd7288e:/lib/MECON/PDF/Marco.php?ds=inline diff --git a/lib/MECON/PDF/Marco.php b/lib/MECON/PDF/Marco.php index 46d07e5..610b98d 100644 --- a/lib/MECON/PDF/Marco.php +++ b/lib/MECON/PDF/Marco.php @@ -25,41 +25,41 @@ $Id$ -----------------------------------------------------------------------------*/ require_once 'MECON/PDF.php'; -require_once 'MECON/HTML/Tabla.php'; /** * Libreria que crea un marco estandar para los pdfs. */ -class MECON_PDF_Marco extends MECON_HTML_Tabla { - - /** - * Objeto MECON_PDF - * @var Object MECON_PDF - * @access protected - */ - var $_pdf; - - /** - * Archivo de configuracion de medidas - * @var array $conf - * @access protected - */ - var $_config = array (); +class MECON_PDF_Marco extends MECON_PDF { /** * Tamanio de las paginas. * @var string $tamanio - * @access protected + * @access public */ - var $_tamanio = "a4"; + var $tamanio = "a4"; /** * Orientacion (portrait o landscape). * @var sting $orientacion + * @access public + */ + var $orientacion = "portrait"; + + /** + * Array de objetos MECON_PDF_Contenido + @ @var array $contenido * @access protected */ - var $_orientacion = "portrait"; + var $_contenido = array(); + /** + * Espacio dispobible en la pagina. Representa la coordenada Y a partir de + * la cual se puede comenzar a escribir el contenido. + * @var int $espacioDisponible + * @access public + */ + var $espacioDisponible; + /** * Logo. * @var string $logo @@ -110,6 +110,13 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { */ var $subtitulo; + /** + * Excepciones al encabezado + * @var array $excepciones + * @access protected + */ + var $_excepciones = array (); + /** * Class constructor. * @@ -120,19 +127,57 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { * @access public */ function MECON_PDF_Marco($tam = "a4", $ori = "portrait") { - $this->_pdf =& new MECON_PDF($tam); - $this->_tamanio = $tam; - $this->_orientacion = $ori; - $this->_config = include 'MECON/PDF/Marco/medidas.php' ; - $this->_config = $this->_config[$tam][$ori]; + $this->MECON_PDF($tam); + $this->tamanio = $tam; + $this->orientacion = $ori; + $tmp = include 'MECON/PDF/Marco/medidas.php' ; + $tmp = $tmp[$tam][$ori]; + $tmp['Xi'] = $this->_config['Xi']; + $tmp['Yi'] = $this->_config['Yi']; + $tmp['Xf'] = $this->_config['Xf']; + $tmp['Yf'] = $this->_config['Yf']; + $this->_config = $tmp; if (@$this->_config['encabezado']['logo']['path']) { $this->logo = $this->_config['encabezado']['logo']['path']; } - $this->_config['Xi'] = $this->_pdf->config['Xi']; - $this->_config['Yi'] = $this->_pdf->config['Yi']; - $this->_config['Xf'] = $this->_pdf->config['Xf']; - $this->_config['Yf'] = $this->_pdf->config['Yf']; - $this->MECON_HTML_Tabla(); + } + + /** + * Permite agregar nuevas paginas al pdf que se esta armando. + * + * @param string $pagina Tipo de pagina que se va a utilizar. + * @param bool $encabezado Indica si el encabezado debe ponerse en la + * pagina. + * @param string $seccion Seccion del encabezado para esta pagina nueva. + * @param string $subseccion SubSeccion del encabezado para esta pagina + * nueva. + * + * @return void + * @access public + */ + function newPage($pagina = 'a4', $encabezado = true, $seccion = null, $subseccion = + null) + { + parent::newPage($pagina); + if ($encabezado) { + $this->espacioDisponible = $this->_config['encabezado']['Yi'] - 27; + if ($this->countPages() === 1) { + if ($this->titulo || $this->subtitulo) { + $this->espacioDisponible -= 27; + } + } + if (!is_null($seccion)) { + $this->excepciones[$this->countPages()]['seccion'] = $seccion; + } + if (!is_null($subseccion)) { + $this->excepciones[$this->countPages()]['subseccion'] = $subseccion; + } + } + else { + $this->espacioDisponible = $this->_config['encabezado']['Yf']; + $this->excepciones[$this->countPages()]['nova'] = true; + + } } /** @@ -144,8 +189,8 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { function _addLogo() { $conf = $this->_config['encabezado']; if ($this->logo) { - $this->_pdf->addImage($this->logo, $conf['logo']['X'], - $conf['logo']['Y'], null, 'jpg', $this->_orientacion); + $this->addImage($this->logo, $conf['logo']['X'], + $conf['logo']['Y'], null, 'jpg', $this->orientacion); } } @@ -158,17 +203,17 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { function _addSeccion() { $conf = $this->_config['encabezado']; if ($this->seccion) { - $tmp = $this->_pdf->strlen($this->seccion, $conf['seccion']); + $tmp = $this->strlen($this->seccion, $conf['seccion']); $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi']; if ($tmp >= $tmp2) { - $this->seccion = $this->_pdf->wrapLine ($this->seccion, $tmp2, + $this->seccion = $this->wrapLine ($this->seccion, $tmp2, $conf['seccion']); - $tmp = $this->_pdf->strlen($this->seccion, $conf['seccion']); + $tmp = $this->strlen($this->seccion, $conf['seccion']); } $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi'] - $conf['linea1']['Xi'] - $tmp) / 2; - $this->_pdf->addText($init, $conf['seccion']['Y'], $this->seccion, - $conf['seccion'], null, $this->_orientacion); + $this->addText($init, $conf['seccion']['Y'], $this->seccion, + $conf['seccion'], null, $this->orientacion); } } @@ -181,17 +226,17 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { function _addSubSeccion() { $conf = $this->_config['encabezado']; if ($this->subseccion) { - $tmp = $this->_pdf->strlen($this->subseccion, $conf['subseccion']); + $tmp = $this->strlen($this->subseccion, $conf['subseccion']); $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi']; if ($tmp >= $tmp2) { - $this->subseccion = $this->_pdf->wrapLine ($this->subseccion, $tmp2, + $this->subseccion = $this->wrapLine ($this->subseccion, $tmp2, $conf['subseccion']); - $tmp = $this->_pdf->strlen($this->subseccion, $conf['subseccion']); + $tmp = $this->strlen($this->subseccion, $conf['subseccion']); } $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi'] - $conf['linea1']['Xi'] - $tmp) / 2; - $this->_pdf->addText($init, $conf['subseccion']['Y'], $this->subseccion, - $conf['subseccion'], null, $this->_orientacion); + $this->addText($init, $conf['subseccion']['Y'], $this->subseccion, + $conf['subseccion'], null, $this->orientacion); } } @@ -204,13 +249,13 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { function _addPager() { $conf = $this->_config['encabezado']; if ($this->paginador) { - $txt = 'Pagina '.$this->_pdf->numPage().' de '. - $this->_pdf->countPages(); - $tmp = $this->_pdf->strlen($txt, $conf['paginador']); + $txt = 'Pagina '.$this->numPage().' de '. + $this->countPages(); + $tmp = $this->strlen($txt, $conf['paginador']); $init = $conf['linea2']['Xi'] + ( $conf['Xf'] - $conf['linea2']['Xi'] - $tmp) / 2; - $this->_pdf->addText($init, $conf['paginador']['Y'], $txt, - $conf['paginador'], null, $this->_orientacion); + $this->addText($init, $conf['paginador']['Y'], $txt, + $conf['paginador'], null, $this->orientacion); } } @@ -223,14 +268,17 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { function _addDate() { $conf = $this->_config['encabezado']; if ($this->fecha) { - if ($this->fecha === true) { + if (is_a($this->fecha, 'Date')) { + $this->fecha = $this->fecha->format("%d/%m/%Y"); + } + elseif ($this->fecha === true) { $this->fecha = date("d/m/Y"); } - $tmp = $this->_pdf->strlen($this->fecha, $conf['fecha']); + $tmp = $this->strlen($this->fecha, $conf['fecha']); $init = $conf['linea2']['Xi'] + ( $conf['Xf'] - $conf['linea2']['Xi'] - $tmp) / 2; - $this->_pdf->addText($init, $conf['fecha']['Y'], $this->fecha, - $conf['fecha'], null, $this->_orientacion); + $this->addText($init, $conf['fecha']['Y'], $this->fecha, + $conf['fecha'], null, $this->orientacion); } } @@ -243,15 +291,25 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { function _addHeaderRectangle() { $conf = $this->_config['encabezado']; //Armo el recuadro - $this->_pdf->addRectangle ($conf['Xi'], $conf['Yi'], $conf['Xf'], - $conf['Yf'], '', null, $this->_orientacion); - $this->_pdf->addLine($conf['linea1']['Xi'], $conf['linea1']['Yi'], + $this->addRectangle ($conf['Xi'], $conf['Yi'], $conf['Xf'], + $conf['Yf'], '', null, $this->orientacion); + $this->addLine($conf['linea1']['Xi'], $conf['linea1']['Yi'], $conf['linea1']['Xf'], $conf['linea1']['Yf'], '', null, - $this->_orientacion); - $this->_pdf->addLine($conf['linea2']['Xi'], $conf['linea2']['Yi'], + $this->orientacion); + $this->addLine($conf['linea2']['Xi'], $conf['linea2']['Yi'], $conf['linea2']['Xf'], $conf['linea2']['Yf'], '', null, - $this->_orientacion); + $this->orientacion); } + + /* + * Funcion que obtiene el ancho de la pagina + * + * @return ancho de la pagina + * @access public + */ + function getWidth() { + return parent::getWidth($this->orientacion); + } /** * Funcion que permite agregar el titulo a una pagina. @@ -262,16 +320,16 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { function _addTitle() { $conf = $this->_config['titulo']; if ($this->titulo) { - $tmp = $this->_pdf->strlen($this->titulo, $conf); - $tmp2 = $this->_pdf->getWidth($this->_orientacion); + $tmp = $this->strlen($this->titulo, $conf); + $tmp2 = $this->getWidth($this->orientacion); if ($tmp >= $tmp2) { - $this->titulo = $this->_pdf->wrapLine ($this->titulo, $tmp2, + $this->titulo = $this->wrapLine ($this->titulo, $tmp2, $conf); - $tmp = $this->_pdf->strlen($this->titulo, $conf); + $tmp = $this->strlen($this->titulo, $conf); } $init = ($tmp2 - $tmp) / 2; - $this->_pdf->addText($init, $conf['Y'], $this->titulo, - $conf, null, $this->_orientacion); + $this->addText($init, $conf['Y'], $this->titulo, + $conf, null, $this->orientacion); } } @@ -284,29 +342,29 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { function _addSubTitle() { $conf = $this->_config['subtitulo']; if ($this->subtitulo) { - $tmp = $this->_pdf->strlen($this->subtitulo, $conf); - $tmp2 = $this->_pdf->getWidth($this->_orientacion); + $tmp = $this->strlen($this->subtitulo, $conf); + $tmp2 = $this->getWidth($this->orientacion); if ($tmp >= $tmp2) { - $this->subtitulo = $this->_pdf->wrapLine ($this->subtitulo, $tmp2, + $this->subtitulo = $this->wrapLine ($this->subtitulo, $tmp2, $conf); - $tmp = $this->_pdf->strlen($this->subtitulo, $conf); + $tmp = $this->strlen($this->subtitulo, $conf); } $init = ($tmp2 - $tmp) / 2; - $this->_pdf->addText($init, $conf['Y'], $this->subtitulo, - $conf, null, $this->_orientacion); + $this->addText($init, $conf['Y'], $this->subtitulo, + $conf, null, $this->orientacion); } } /** - * Funcion que agrega la informacion del marco a la pagina actual. + * Funcion que agrega el encabezado a la pagina actual. * * @param bool $title Muetra o no el titulo. * @param bool $subtitle Muestra o no el subtitulo. * * @return void - * @access public + * @access protected */ - function buildPage($title = true, $subtitle = true) { + function _buildHeader($title = true, $subtitle = true) { $this->_addLogo(); $this->_addSeccion(); $this->_addSubseccion(); @@ -322,21 +380,77 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { } /** - * Funcion que devuelve el espacio dispobible en una pagina. + * Funcion que agrega el contenido al PDF. * - * @param int $pagina Numero de pagina. - * - * @return int + * @return void * @access protected */ - function _getAvailableSpace($pagina) { - if ($pagina === 1 && $this->titulo && $this->subtitulo) { - return $this->_config['contenido']['Y']; + function _buildContent() { + if ($this->_contenido) { + foreach ($this->_contenido as $cont) { + $cont->toPDF($this); + //MECON_PDF_Marco se pasa por referencia para que se agregen las + //paginas a medida que se van necesitando. Esto permite que varie el + //tipo de contenido que se agrega. + } } - else { - return $this->_config['titulo']['Y']; + } + + /** + * Funcion que se encarga de transformar la informacion para que se genere + * el archivo pdf. + * + * @return pdffile Archivo PDF. + * @access public + */ + function toPDF() { + $this->newPage($this->tamanio); + $this->_buildContent(); + if ($this->getPages()) { + $t = true; + foreach ($this->getPages() as $page) { + $this->_pagina_actual = $page; + + $sec = $this->seccion; + $subsec = $this->subseccion; + + if (@$this->_excepciones[$this->numPage($page)]['seccion']) { + $this->seccion = + $this->_excepciones[$this->numPage($page)]['seccion']; + } + + if (@$this->_excepciones[$this->numPage($page)]['subseccion']) { + $this->subseccion = + $this->_excepciones[$this->numPage($page)]['subseccion']; + } + + if (@!$this->_excepciones[$this->numPage($page)]['nova']) { + $this->_buildHeader($t, $t); + } + $t = false; + + $this->seccion = $sec; + $this->subseccion = $subsec; + } + return parent::toPDF(); } } + /** + * Funcion que pemite agregar contenido al PDF. + * + * @param mixed $contenido Objeto contenido que se agrega. + * @param bool $separador Indicacion si hay que agregar un separador. + * + * @return void + * @access public + */ + function addContent($contenido, $separador = true) { + if ($separador && $this->getPages()) { + //@TODO Agregar el separador por defecto. + //$this->contenido[] = $separador_defecto + } + $this->_contenido[] = $contenido; + } } -?> \ No newline at end of file +?>