X-Git-Url: https://git.llucax.com/mecon/meconlib.git/blobdiff_plain/c3b42bba0c46c9510b6ca095dfab862ff97170e6..1b946b6e47650fa5465986e2164fbaecdb46e393:/lib/MECON/PDF/Marco.php diff --git a/lib/MECON/PDF/Marco.php b/lib/MECON/PDF/Marco.php index 397a5ae..0005392 100644 --- a/lib/MECON/PDF/Marco.php +++ b/lib/MECON/PDF/Marco.php @@ -25,48 +25,42 @@ $Id$ -----------------------------------------------------------------------------*/ require_once 'MECON/PDF.php'; -require_once 'MECON/HTML/Tabla.php'; +require_once 'MECON/PDF/Separador.php'; +require_once 'MECON/PDF/HeaderDefecto.php'; /** * Libreria que crea un marco estandar para los pdfs. */ -class MECON_PDF_Marco extends MECON_HTML_Tabla { +class MECON_PDF_Marco extends MECON_PDF { /** - * Objeto MECON_PDF - * @var Object MECON_PDF + * Objeto MECON_PDF_Separador que se utilizara por defecto. + * @var Object $separador * @access protected */ - var $_pdf; - - /** - * Archivo de configuracion de medidas - * @var array $conf - * @access protected - */ - var $_config = array (); + var $_separador_defecto; /** - * Tamanio de las paginas. - * @var string $tamanio + * Array de objetos MECON_PDF_Contenido + * @var array $contenido * @access protected */ - var $_tamanio = "a4"; - + var $_contenido = array(); + /** - * Orientacion (portrait o landscape). - * @var sting $orientacion - * @access protected + * 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 $_orientacion = "portrait"; - + var $espacioDisponible; + /** * Logo. * @var string $logo * @access public */ - var $logo = '/home/mmarrese/public_html/meconlib/www/images/pdf_logo.jpg'; - //@FIXME Ponener el path del logo por defecto + var $logo; /** * Paginador. @@ -102,148 +96,106 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { * @var string $string * @access public */ - var $titulo = true; + var $titulo; /** * SubTitulo. * @var string $subtitulo * @access public */ - var $subtitulo = true; + var $subtitulo; + + /** + * Excepciones al encabezado + * @var array $excepciones + * @access protected + */ + var $_excepciones = array (); + /** + * MECON_PDF_Header. Objeto que hay que utilizar como enzabezado. Si hay + * algo aqui se desecha el encabezado por defecto. + * @var Object $header + * @access public + */ + var $header = null; + /** * Class constructor. * * @param string $tam Tamanio de las hojas. * @param string $ori Orientacion de las hojaz (portrait o landscape). + * @param string $nom Nombre del archivo. * * @return void * @access public */ - function MECON_PDF_Marco($tam = "a4", $ori = "portrait") { - $this->_pdf =& new MECON_PDF; - $this->_tamanio = $tam; - $this->_orientacion = $ori; - $this->_config = include 'MECON/PDF/Marco/medidas.php' ; - $this->_config = $this->_config[$tam][$ori]; - $this->MECON_HTML_Tabla(); + function MECON_PDF_Marco($tam = "a4", $ori = "portrait", $nom = 'Doc.pdf') { + $this->MECON_PDF($tam, $ori, $nom); + $this->tamanio = $tam; + $this->_resetConf(); + $this->_separador_defecto =& new MECON_PDF_Separador(); } /** - * Funcion que agrega el logo al encabezado de una pagina. - * - * @return void - * @access protected + * Funcion que setea los valores de conf para poder poner las cabeceras + * @access private + * @param int $pagina numero del la pagina de la que debe setear loa + * valores + * @return void */ - function _addLogo() { - $conf = $this->_config['encabezado']; - if ($this->logo) { - $this->_pdf->addImage($this->logo, $conf['logo']['X'], - $conf['logo']['Y'], null, 'jpg'); - } + function _resetConf($pagina = null) + { + if(is_null($pagina)); + $pagina = $this->numPage(); + $tmp = include 'MECON/PDF/Marco/medidas.php' ; + $tmp = $tmp[$this->tamanio][$this->getOrientation($pagina)]; + $tmp['Xi'] = $this->_config['Xi']; + $tmp['Yi'] = $this->_config['Yi']; + $tmp['Xf'] = $this->_config['Xf']; + $tmp['Yf'] = $this->_config['Yf']; + $this->_config = $tmp; } /** - * Funcion que agrega la seccion al encabezado de una pagina. + * Permite agregar nuevas paginas al pdf que se esta armando. * - * @return void - * @access protected - */ - function _addSeccion() { - $conf = $this->_config['encabezado']; - if ($this->seccion) { - $tmp = $this->_pdf->strlen($this->seccion, $conf['seccion']); - $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi']; - if ($tmp >= $tmp2) { - $this->seccion = $this->_pdf->wrapLine ($this->seccion, $tmp2, - $conf['seccion']); - $tmp = $this->_pdf->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']); - } - } - - /** - * Funcion que agrega la subseccion al encabezado de una pagina. + * @param string $pagina Tipo de pagina que se va a utilizar. + * @param string $orientacion Orientacion de la hoja + * @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 protected + * @access public */ - function _addSubSeccion() { - $conf = $this->_config['encabezado']; - if ($this->subseccion) { - $tmp = $this->_pdf->strlen($this->subseccion, $conf['subseccion']); - $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi']; - if ($tmp >= $tmp2) { - $this->subseccion = $this->_pdf->wrapLine ($this->subseccion, $tmp2, - $conf['subseccion']); - $tmp = $this->_pdf->strlen($this->subseccion, $conf['subseccion']); + function newPage($pagina = 'a4', $orientacion = null, $encabezado = true, + $seccion = null, $subseccion = null) { + parent::newPage($pagina, $orientacion); + $this->_resetConf(); + if ($encabezado) { + $this->espacioDisponible = $this->header->getAltura() - 27; + if ($this->countPages() === 1) { + if ($this->titulo || $this->subtitulo) { + $this->espacioDisponible -= 27; + } } - $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi'] - - $conf['linea1']['Xi'] - $tmp) / 2; - $this->_pdf->addText($init, $conf['subseccion']['Y'], $this->subseccion, - $conf['subseccion']); - } - } - - /** - * Funcion que agrega el paginador al encabezado de una pagina. - * - * @return void - * @access protected - */ - 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']); - $init = $conf['linea2']['Xi'] + ( $conf['Xf'] - - $conf['linea2']['Xi'] - $tmp) / 2; - $this->_pdf->addText($init, $conf['paginador']['Y'], $txt, - $conf['paginador']); - } - } - - /** - * Funcion que permite agregar la fecha al encabezado de una pagina. - * - * @return void - * @access protected - */ - function _addDate() { - $conf = $this->_config['encabezado']; - if ($this->fecha) { - if ($this->fecha === true) { - $this->fecha = date("d/m/Y"); + if (!is_null($seccion)) { + $this->_excepciones[$this->numPage()]['seccion'] = $seccion; + } + if (!is_null($subseccion)) { + $this->_excepciones[$this->numPage()]['subseccion'] = $subseccion; } - $tmp = $this->_pdf->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']); + } + else { + $this->espacioDisponible = $this->_config['Yf']; + $this->_excepciones[$this->countPages()]['nova'] = true; + } } - - /** - * Funcion que arma el recuadro del encabezado de las paginas. - * - * @return void - * @access protected - */ - function _addHeaderRectangle() { - $conf = $this->_config['encabezado']; - //Armo el recuadro - $this->_pdf->addRectangle ($conf['Yi'], $conf['Xi'], $conf['Yf'], - $conf['Xf']); - $this->_pdf->addLine($conf['linea1']['Xi'], $conf['linea1']['Yi'], - $conf['linea1']['Xf'], $conf['linea1']['Yf']); - $this->_pdf->addLine($conf['linea2']['Xi'], $conf['linea2']['Yi'], - $conf['linea2']['Xf'], $conf['linea2']['Yf']); - } - + /** * Funcion que permite agregar el titulo a una pagina. * @@ -251,17 +203,18 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { * @access protected */ function _addTitle() { + $this->_resetConf(); $conf = $this->_config['titulo']; if ($this->titulo) { - $tmp = $this->_pdf->strlen($this->titulo, $conf); - $tmp2 = $this->_config['Xf'] + abs($this->_config['Xi']); + $tmp = $this->strlen($this->titulo, $conf); + $tmp2 = $this->getWidth(); 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 = $this->_config['Xi'] + ($tmp2 - $tmp) / 2; - $this->_pdf->addText($init, $conf['Y'], $this->titulo, + $init = ($tmp2 - $tmp) / 2; + $this->addText($init, $conf['Y'], $this->titulo, $conf); } } @@ -273,63 +226,139 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { * @access protected */ function _addSubTitle() { + $this->_resetConf(); $conf = $this->_config['subtitulo']; if ($this->subtitulo) { - $tmp = $this->_pdf->strlen($this->subtitulo, $conf); - $tmp2 = $this->_config['Xf'] + abs($this->_config['Xi']); + $tmp = $this->strlen($this->subtitulo, $conf); + $tmp2 = $this->getWidth(); 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 = $this->_config['Xi'] + ($tmp2 - $tmp) / 2; - $this->_pdf->addText($init, $conf['Y'], $this->subtitulo, + $init = ($tmp2 - $tmp) / 2; + $this->addText($init, $conf['Y'], $this->subtitulo, $conf); } } /** - * 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) { - $this->_addLogo(); - $this->_addSeccion(); - $this->_addSubseccion(); - $this->_addPager(); - $this->_addDate(); - $this->_addHeaderRectangle(); + function _buildHeader($title = true, $subtitle = true) { + //Agrego el header. + $this->header->toPdf($this); if ($title) { $this->_addTitle(); } if ($subtitle) { $this->_addSubTitle(); } -// $this->_pdf->addLine($this->_config['Xi'], $this->_config['Yi'], -// $this->_config['Xf'], $this->_config['Yi']); } /** - * Funcion que devuelve el espacio dispobible en una pagina. + * Funcion que crea el Header por defecto. * - * @param int $pagina Numero de pagina. + * @return void + * @access protected + */ + function _crearHeaderDefecto() { + $this->header =& new MECON_PDF_HeaderDefecto($this->tamanio, + $this->getOrientation($this->numPage())); + if (@$this->logo) { + $this->header->logo = $this->logo; + } + $this->header->seccion = $this->seccion; + $this->header->subseccion = $this->subseccion; + $this->header->paginador = $this->paginador; + $this->header->fecha = $this->fecha; + } + + /** + * Funcion que agrega el contenido al PDF. * - * @return int + * @return void * @access protected */ - function _getAvailableSpace($pagina) { - if ($pagina === 1) { - return $this->_config['contenido']['Y']; + function _buildContent() { + $this->_resetConf(); + 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() { + //Veo si hay que utilizar o no el header por defecto. + if (!$this->header) { + $this->_crearHeaderDefecto(); + } + + $this->_buildContent(); + if ($this->getPages()) { + $t = true; + foreach ($this->getPages() as $page) { + $this->_pagina_actual = $page; + + $sec = $this->header->seccion; + $subsec = $this->header->subseccion; + + if (@$this->_excepciones[$this->numPage($page)]['seccion']) { + $this->header->seccion = + $this->_excepciones[$this->numPage($page)]['seccion']; + } + + if (@$this->_excepciones[$this->numPage($page)]['subseccion']) { + $this->header->subseccion = + $this->_excepciones[$this->numPage($page)]['subseccion']; + } + + if (@!$this->_excepciones[$this->numPage($page)]['nova']) { + $this->_buildHeader($t, $t); + } + //Solo agrego el titulo y subtitulo en la primer hoja + $t = false; + + $this->header->seccion = $sec; + $this->header->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) { + //Me aseguro de poner el separador siempre y cuando no sea el primer + //objeto de la primer pagina. + if ($separador && $this->_contenido) { + $this->_contenido[] = $this->_separador_defecto; + } + $this->_contenido[] = $contenido; + } } -?> \ No newline at end of file +?>