]> git.llucax.com Git - mecon/meconlib.git/blobdiff - lib/MECON/PDF/Marco.php
BugFix.
[mecon/meconlib.git] / lib / MECON / PDF / Marco.php
index 1fdadafdba0c704edb594e6ef082283c15643b3d..0005392fb34f549e0a9f9e92faf32220a3bce97d 100644 (file)
@@ -26,6 +26,7 @@ $Id$
 
 require_once 'MECON/PDF.php';
 require_once 'MECON/PDF/Separador.php';
+require_once 'MECON/PDF/HeaderDefecto.php';
 
 /**
  * Libreria que crea un marco estandar para los pdfs.
@@ -110,18 +111,27 @@ class MECON_PDF_Marco extends MECON_PDF {
      * @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->MECON_PDF($tam, $ori);
+    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();
@@ -145,9 +155,6 @@ class MECON_PDF_Marco extends MECON_PDF {
         $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'];
-        }
     }
 
     /**
@@ -164,12 +171,12 @@ class MECON_PDF_Marco extends MECON_PDF {
      * @return void
      * @access public
      */
-    function newPage($pagina = 'a4', $orientacion = null, $encabezado = true, $seccion = null, $subseccion =
-            null)
-    {   
+    function newPage($pagina = 'a4', $orientacion = null, $encabezado = true, 
+            $seccion = null, $subseccion = null) {   
         parent::newPage($pagina, $orientacion);
+        $this->_resetConf();
         if ($encabezado) {
-            $this->espacioDisponible = $this->_config['encabezado']['Yi'] - 27;
+            $this->espacioDisponible = $this->header->getAltura() - 27;
             if ($this->countPages() === 1) {
                 if ($this->titulo || $this->subtitulo) {
                     $this->espacioDisponible -= 27;
@@ -183,137 +190,12 @@ class MECON_PDF_Marco extends MECON_PDF {
             }
         }
         else {
-            $this->espacioDisponible = $this->_config['encabezado']['Yf'];
+            $this->espacioDisponible = $this->_config['Yf'];
             $this->_excepciones[$this->countPages()]['nova'] = true;
             
         }
     }
 
-    /**
-     * Funcion que agrega el logo al encabezado de una pagina.
-     *
-     * @return void
-     * @access protected
-     */
-    function _addLogo() {
-        $this->_resetConf();
-        $conf = $this->_config['encabezado'];
-        if ($this->logo) {
-            $this->addImage($this->logo, $conf['logo']['X'],
-                    $conf['logo']['Y'], null, 'jpg');
-        }
-    }
-
-    /**
-     * Funcion que agrega la seccion al encabezado de una pagina.
-     *
-     * @return void
-     * @access protected
-     */
-    function _addSeccion() {
-        $this->_resetConf();
-        $conf = $this->_config['encabezado'];
-        if ($this->seccion) {
-            $tmp = $this->strlen($this->seccion, $conf['seccion']);
-            $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi'];
-            if ($tmp >= $tmp2) {
-                $this->seccion = $this->wrapLine ($this->seccion, $tmp2,
-                        $conf['seccion']);
-                $tmp = $this->strlen($this->seccion, $conf['seccion']);
-            }
-            $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi'] 
-                    - $conf['linea1']['Xi'] - $tmp) / 2; 
-            $this->addText($init, $conf['seccion']['Y'], $this->seccion,
-                    $conf['seccion']);
-        }
-    }
-   
-    /**
-     * Funcion que agrega la subseccion al encabezado de una pagina.
-     *
-     * @return void
-     * @access protected
-     */
-    function _addSubSeccion() {
-        $this->_resetConf();
-        $conf = $this->_config['encabezado'];
-        if ($this->subseccion) {
-            $tmp = $this->strlen($this->subseccion, $conf['subseccion']);
-            $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi'];
-            if ($tmp >= $tmp2) {
-                $this->subseccion = $this->wrapLine ($this->subseccion, $tmp2,
-                        $conf['subseccion']);
-                $tmp = $this->strlen($this->subseccion, $conf['subseccion']);
-            }
-            $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi'] 
-                    - $conf['linea1']['Xi'] - $tmp) / 2; 
-            $this->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() {
-        $this->_resetConf();
-        $conf = $this->_config['encabezado'];
-        if ($this->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->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() {
-        $this->_resetConf();
-        $conf = $this->_config['encabezado'];
-        if ($this->fecha) {
-            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->strlen($this->fecha, $conf['fecha']);
-            $init = $conf['linea2']['Xi'] + ( $conf['Xf'] 
-                    - $conf['linea2']['Xi'] - $tmp) / 2; 
-            $this->addText($init, $conf['fecha']['Y'], $this->fecha,
-                    $conf['fecha']);
-        }
-    }
-    
-    /**
-     * Funcion que arma el recuadro del encabezado de las paginas.
-     * 
-     * @return void
-     * @access protected
-     */
-    function _addHeaderRectangle() {
-        $this->_resetConf();
-        $conf = $this->_config['encabezado'];
-        //Armo el recuadro
-        $this->addRectangle ($conf['Xi'], $conf['Yi'], $conf['Xf'], 
-                    $conf['Yf'], '');
-        $this->addLine($conf['linea1']['Xi'], $conf['linea1']['Yi'], 
-                $conf['linea1']['Xf'], $conf['linea1']['Yf'], '');
-        $this->addLine($conf['linea2']['Xi'], $conf['linea2']['Yi'], 
-                $conf['linea2']['Xf'], $conf['linea2']['Yf'], '');
-    }
-
     /**
      * Funcion que permite agregar el titulo a una pagina.
      *
@@ -370,13 +252,8 @@ class MECON_PDF_Marco extends MECON_PDF {
      * @access protected
      */
     function _buildHeader($title = true, $subtitle = true) {
-        $this->_resetConf();
-        $this->_addLogo();
-        $this->_addSeccion();
-        $this->_addSubseccion();
-        $this->_addPager();
-        $this->_addDate();
-        $this->_addHeaderRectangle();
+        //Agrego el header.
+        $this->header->toPdf($this);
         if ($title) {
             $this->_addTitle();
         }
@@ -385,6 +262,24 @@ class MECON_PDF_Marco extends MECON_PDF {
         }
     }
 
+    /**
+     * Funcion que crea el Header por defecto.
+     *
+     * @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.
      *
@@ -411,32 +306,38 @@ class MECON_PDF_Marco extends MECON_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->seccion;
-                $subsec = $this->subseccion;
+                $sec = $this->header->seccion;
+                $subsec = $this->header->subseccion;
                 
                 if (@$this->_excepciones[$this->numPage($page)]['seccion']) {
-                    $this->seccion = 
+                    $this->header->seccion = 
                         $this->_excepciones[$this->numPage($page)]['seccion'];
                 }
                 
                 if (@$this->_excepciones[$this->numPage($page)]['subseccion']) {
-                    $this->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->seccion = $sec;
-                $this->subseccion = $subsec;
+                $this->header->seccion = $sec;
+                $this->header->subseccion = $subsec;
             }
         return parent::toPDF();
         }
@@ -454,7 +355,7 @@ class MECON_PDF_Marco extends MECON_PDF {
     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) {
+        if ($separador && $this->_contenido) {
             $this->_contenido[] = $this->_separador_defecto;
         }
         $this->_contenido[] = $contenido;