]> git.llucax.com Git - mecon/meconlib.git/blobdiff - lib/MECON/PDF/Marco.php
Reestructuracion de todos los PDF
[mecon/meconlib.git] / lib / MECON / PDF / Marco.php
index 397a5ae072a5ed5045f6d02ac75e54b7137b3072..79705ee1b91720983b65e7f7608daf0c35d7ca45 100644 (file)
@@ -25,48 +25,47 @@ $Id$
 -----------------------------------------------------------------------------*/
 
 require_once 'MECON/PDF.php';
 -----------------------------------------------------------------------------*/
 
 require_once 'MECON/PDF.php';
-require_once 'MECON/HTML/Tabla.php';
 
 /**
  * Libreria que crea un marco estandar para los pdfs.
  */
 
 /**
  * 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
 
     /**
      * Tamanio de las paginas.
      * @var string $tamanio
-     * @access protected
+     * @access public   
      */
      */
-    var $_tamanio = "a4";
+    var $tamanio = "a4";
 
     /**
      * Orientacion (portrait o landscape).
      * @var sting $orientacion
 
     /**
      * Orientacion (portrait o landscape).
      * @var sting $orientacion
+     * @access public
+     */
+    var $orientacion = "portrait";   
+
+    /**
+     * Array de objetos MECON_PDF_Contenido
+     @ @var array $contenido
      * @access protected
      */
      * @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
      * @access public
      */
     /**
      * 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.
 
     /**
      * Paginador.
@@ -102,15 +101,22 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla {
      * @var string $string
      * @access public 
      */
      * @var string $string
      * @access public 
      */
-    var $titulo = true;
+    var $titulo;
 
     /**
      * SubTitulo.
      * @var string $subtitulo
      * @access public 
      */
 
     /**
      * SubTitulo.
      * @var string $subtitulo
      * @access public 
      */
-    var $subtitulo = true;
+    var $subtitulo;
 
 
+    /**
+     * Excepciones al encabezado
+     * @var array $excepciones
+     * @access protected
+     */
+    var $_excepciones = array ();
+     
     /**
      * Class constructor.
      *
     /**
      * Class constructor.
      *
@@ -121,12 +127,57 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla {
      * @access public
      */
     function MECON_PDF_Marco($tam = "a4", $ori = "portrait") {
      * @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();
+        $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'];
+        }
+    }
+
+    /**
+     * 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;
+            
+        }
     }
 
     /**
     }
 
     /**
@@ -138,8 +189,8 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla {
     function _addLogo() {
         $conf = $this->_config['encabezado'];
         if ($this->logo) {
     function _addLogo() {
         $conf = $this->_config['encabezado'];
         if ($this->logo) {
-            $this->_pdf->addImage($this->logo, $conf['logo']['X'],
-                    $conf['logo']['Y'], null, 'jpg');
+            $this->addImage($this->logo, $conf['logo']['X'],
+                    $conf['logo']['Y'], null, 'jpg', $this->orientacion);
         }
     }
 
         }
     }
 
@@ -152,16 +203,17 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla {
     function _addSeccion() {
         $conf = $this->_config['encabezado'];
         if ($this->seccion) {
     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) {
             $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']);
                         $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; 
             }
             $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi'] 
                     - $conf['linea1']['Xi'] - $tmp) / 2; 
-            $this->_pdf->addText($init, $conf['seccion']['Y'], $this->seccion, $conf['seccion']);
+            $this->addText($init, $conf['seccion']['Y'], $this->seccion,
+                    $conf['seccion'], null, $this->orientacion);
         }
     }
    
         }
     }
    
@@ -174,17 +226,17 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla {
     function _addSubSeccion() {
         $conf = $this->_config['encabezado'];
         if ($this->subseccion) {
     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) {
             $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']);
                         $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; 
             }
             $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi'] 
                     - $conf['linea1']['Xi'] - $tmp) / 2; 
-            $this->_pdf->addText($init, $conf['subseccion']['Y'], $this->subseccion, 
-                    $conf['subseccion']);
+            $this->addText($init, $conf['subseccion']['Y'], $this->subseccion, 
+                    $conf['subseccion'], null, $this->orientacion);
         }
     }
 
         }
     }
 
@@ -197,13 +249,13 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla {
     function _addPager() {
         $conf = $this->_config['encabezado'];
         if ($this->paginador) {
     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; 
             $init = $conf['linea2']['Xi'] + ( $conf['Xf'] 
                     - $conf['linea2']['Xi'] - $tmp) / 2; 
-            $this->_pdf->addText($init, $conf['paginador']['Y'], $txt, 
-                    $conf['paginador']);
+            $this->addText($init, $conf['paginador']['Y'], $txt, 
+                    $conf['paginador'], null, $this->orientacion);
         }
     }
     
         }
     }
     
@@ -216,14 +268,15 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla {
     function _addDate() {
         $conf = $this->_config['encabezado'];
         if ($this->fecha) {
     function _addDate() {
         $conf = $this->_config['encabezado'];
         if ($this->fecha) {
+            //@TODO Ver si es un objeto DATE            
             if ($this->fecha === true) {
                 $this->fecha = date("d/m/Y");
             }
             if ($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; 
             $init = $conf['linea2']['Xi'] + ( $conf['Xf'] 
                     - $conf['linea2']['Xi'] - $tmp) / 2; 
-            $this->_pdf->addText($init, $conf['fecha']['Y'], $this->fecha,
-                    $conf['fecha']);
+            $this->addText($init, $conf['fecha']['Y'], $this->fecha,
+                    $conf['fecha'], null, $this->orientacion);
         }
     }
     
         }
     }
     
@@ -236,12 +289,14 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla {
     function _addHeaderRectangle() {
         $conf = $this->_config['encabezado'];
         //Armo el recuadro
     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']);
+        $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->addLine($conf['linea2']['Xi'], $conf['linea2']['Yi'], 
+                $conf['linea2']['Xf'], $conf['linea2']['Yf'], '', null,
+                $this->orientacion);
     }
     
     /**
     }
     
     /**
@@ -253,16 +308,16 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla {
     function _addTitle() {
         $conf = $this->_config['titulo'];
         if ($this->titulo) {
     function _addTitle() {
         $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($this->orientacion);
             if ($tmp >= $tmp2) {
             if ($tmp >= $tmp2) {
-                $this->titulo = $this->_pdf->wrapLine ($this->titulo, $tmp2,
+                $this->titulo = $this->wrapLine ($this->titulo, $tmp2,
                         $conf);
                         $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, 
-                    $conf);
+            $init = ($tmp2 - $tmp) / 2; 
+            $this->addText($init, $conf['Y'], $this->titulo, 
+                    $conf, null, $this->orientacion);
         }
     }
 
         }
     }
 
@@ -275,29 +330,29 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla {
     function _addSubTitle() {
         $conf = $this->_config['subtitulo'];
         if ($this->subtitulo) {
     function _addSubTitle() {
         $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($this->orientacion);
             if ($tmp >= $tmp2) {
             if ($tmp >= $tmp2) {
-                $this->subtitulo = $this->_pdf->wrapLine ($this->subtitulo, $tmp2,
+                $this->subtitulo = $this->wrapLine ($this->subtitulo, $tmp2,
                         $conf);
                         $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, 
-                    $conf);
+            $init = ($tmp2 - $tmp) / 2; 
+            $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
      *
      * @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();
         $this->_addLogo();
         $this->_addSeccion();
         $this->_addSubseccion();
@@ -310,26 +365,80 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla {
         if ($subtitle) {
             $this->_addSubTitle();
         }
         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 agrega el contenido al PDF.
      *
      *
-     * @param int $pagina Numero de pagina.
-     *
-     * @return int
+     * @return void
      * @access protected
      */
      * @access protected
      */
-    function _getAvailableSpace($pagina) {
-        if ($pagina === 1) {
-            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
 }
 ?>
\ No newline at end of file