]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/PDF/Marco.php
Primera version de MECON_PDF, MECON_PDF_Marco y MECON_PDF_Tabla terminadas
[mecon/meconlib.git] / lib / MECON / PDF / Marco.php
1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
3                              Ministerio de Economía
4                                     meconlib
5 -------------------------------------------------------------------------------
6 This file is part of meconlib.
7
8 meconlib is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2 of the License, or (at your option)
11 any later version.
12
13 meconlib is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16  
17 You should have received a copy of the GNU General Public License; if not,
18 write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
19 Boston, MA  02111-1307  USA
20 -------------------------------------------------------------------------------
21 Creado: Fri Oct 24 16:34:11 2003
22 Autor:  Martin Marrese <mmarre@mecon.gov.ar>
23 -------------------------------------------------------------------------------
24 $Id$
25 -----------------------------------------------------------------------------*/
26
27 require_once 'MECON/PDF.php';
28 require_once 'MECON/HTML/Tabla.php';
29
30 /**
31  * Libreria que crea un marco estandar para los pdfs.
32  */
33 class MECON_PDF_Marco extends MECON_HTML_Tabla {
34
35     /**
36      * Objeto MECON_PDF
37      * @var Object MECON_PDF
38      * @access protected
39      */
40     var $_pdf;
41     
42     /**
43      * Archivo de configuracion de medidas
44      * @var array $conf
45      * @access protected
46      */
47     var $_config = array ();
48
49     /**
50      * Tamanio de las paginas.
51      * @var string $tamanio
52      * @access protected
53      */
54     var $_tamanio = "a4";
55
56     /**
57      * Orientacion (portrait o landscape).
58      * @var sting $orientacion
59      * @access protected
60      */
61     var $_orientacion = "portrait";   
62     
63     /**
64      * Logo.
65      * @var string $logo
66      * @access public
67      */
68     var $logo; 
69
70     /**
71      * Paginador.
72      * @var bool $paginador
73      * @access public 
74      */
75     var $paginador = true;
76
77     /**
78      * Fecha. Si es true se pone la fecha del servidor, si es false no se pone
79      * nada, en caso contrario se pone lo que haya en esta variable.
80      * @var mixed $fecha
81      * @access public
82      */
83     var $fecha = true;
84     
85     /**
86      * Seccion.
87      * @var string $seccion
88      * @access public 
89      */
90     var $seccion = '';
91
92     /**
93      * SubSeccion.
94      * @var string $subseccion
95      * @access public 
96      */
97     var $subseccion = 'Ministerio de Economia';
98
99     /**
100      * Titulo.
101      * @var string $string
102      * @access public 
103      */
104     var $titulo;
105
106     /**
107      * SubTitulo.
108      * @var string $subtitulo
109      * @access public 
110      */
111     var $subtitulo;
112
113     /**
114      * Class constructor.
115      *
116      * @param string $tam Tamanio de las hojas.
117      * @param string $ori Orientacion de las hojaz (portrait o landscape).
118      *
119      * @return void
120      * @access public
121      */
122     function MECON_PDF_Marco($tam = "a4", $ori = "portrait") {
123         $this->_pdf =& new MECON_PDF($tam);
124         $this->_tamanio = $tam;
125         $this->_orientacion = $ori;
126         $this->_config = include 'MECON/PDF/Marco/medidas.php' ; 
127         $this->_config = $this->_config[$tam][$ori];
128         if (@$this->_config['encabezado']['logo']['path']) {
129             $this->logo = $this->_config['encabezado']['logo']['path'];
130         }
131         $this->_config['Xi'] = $this->_pdf->config['Xi'];
132         $this->_config['Yi'] = $this->_pdf->config['Yi'];
133         $this->_config['Xf'] = $this->_pdf->config['Xf'];
134         $this->_config['Yf'] = $this->_pdf->config['Yf'];
135         $this->MECON_HTML_Tabla();
136     }
137
138     /**
139      * Funcion que agrega el logo al encabezado de una pagina.
140      *
141      * @return void
142      * @access protected
143      */
144     function _addLogo() {
145         $conf = $this->_config['encabezado'];
146         if ($this->logo) {
147             $this->_pdf->addImage($this->logo, $conf['logo']['X'],
148                     $conf['logo']['Y'], null, 'jpg', $this->_orientacion);
149         }
150     }
151
152     /**
153      * Funcion que agrega la seccion al encabezado de una pagina.
154      *
155      * @return void
156      * @access protected
157      */
158     function _addSeccion() {
159         $conf = $this->_config['encabezado'];
160         if ($this->seccion) {
161             $tmp = $this->_pdf->strlen($this->seccion, $conf['seccion']);
162             $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi'];
163             if ($tmp >= $tmp2) {
164                 $this->seccion = $this->_pdf->wrapLine ($this->seccion, $tmp2,
165                         $conf['seccion']);
166                 $tmp = $this->_pdf->strlen($this->seccion, $conf['seccion']);
167             }
168             $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi'] 
169                     - $conf['linea1']['Xi'] - $tmp) / 2; 
170             $this->_pdf->addText($init, $conf['seccion']['Y'], $this->seccion,
171                     $conf['seccion'], null, $this->_orientacion);
172         }
173     }
174    
175     /**
176      * Funcion que agrega la subseccion al encabezado de una pagina.
177      *
178      * @return void
179      * @access protected
180      */
181     function _addSubSeccion() {
182         $conf = $this->_config['encabezado'];
183         if ($this->subseccion) {
184             $tmp = $this->_pdf->strlen($this->subseccion, $conf['subseccion']);
185             $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi'];
186             if ($tmp >= $tmp2) {
187                 $this->subseccion = $this->_pdf->wrapLine ($this->subseccion, $tmp2,
188                         $conf['subseccion']);
189                 $tmp = $this->_pdf->strlen($this->subseccion, $conf['subseccion']);
190             }
191             $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi'] 
192                     - $conf['linea1']['Xi'] - $tmp) / 2; 
193             $this->_pdf->addText($init, $conf['subseccion']['Y'], $this->subseccion, 
194                     $conf['subseccion'], null, $this->_orientacion);
195         }
196     }
197
198     /**
199      * Funcion que agrega el paginador al encabezado de una pagina.
200      *
201      * @return void
202      * @access protected
203      */
204     function _addPager() {
205         $conf = $this->_config['encabezado'];
206         if ($this->paginador) {
207             $txt = 'Pagina '.$this->_pdf->numPage().' de '.
208                 $this->_pdf->countPages();
209             $tmp = $this->_pdf->strlen($txt, $conf['paginador']);
210             $init = $conf['linea2']['Xi'] + ( $conf['Xf'] 
211                     - $conf['linea2']['Xi'] - $tmp) / 2; 
212             $this->_pdf->addText($init, $conf['paginador']['Y'], $txt, 
213                     $conf['paginador'], null, $this->_orientacion);
214         }
215     }
216     
217     /**
218      * Funcion que permite agregar la fecha al encabezado de una pagina.
219      *
220      * @return void
221      * @access protected
222      */
223     function _addDate() {
224         $conf = $this->_config['encabezado'];
225         if ($this->fecha) {
226             if ($this->fecha === true) {
227                 $this->fecha = date("d/m/Y");
228             }
229             $tmp = $this->_pdf->strlen($this->fecha, $conf['fecha']);
230             $init = $conf['linea2']['Xi'] + ( $conf['Xf'] 
231                     - $conf['linea2']['Xi'] - $tmp) / 2; 
232             $this->_pdf->addText($init, $conf['fecha']['Y'], $this->fecha,
233                     $conf['fecha'], null, $this->_orientacion);
234         }
235     }
236     
237     /**
238      * Funcion que arma el recuadro del encabezado de las paginas.
239      * 
240      * @return void
241      * @access protected
242      */
243     function _addHeaderRectangle() {
244         $conf = $this->_config['encabezado'];
245         //Armo el recuadro
246         $this->_pdf->addRectangle ($conf['Xi'], $conf['Yi'], $conf['Xf'], 
247                     $conf['Yf'], '', null, $this->_orientacion);
248         $this->_pdf->addLine($conf['linea1']['Xi'], $conf['linea1']['Yi'], 
249                 $conf['linea1']['Xf'], $conf['linea1']['Yf'], '', null,
250                 $this->_orientacion);
251         $this->_pdf->addLine($conf['linea2']['Xi'], $conf['linea2']['Yi'], 
252                 $conf['linea2']['Xf'], $conf['linea2']['Yf'], '', null,
253                 $this->_orientacion);
254     }
255     
256     /**
257      * Funcion que permite agregar el titulo a una pagina.
258      *
259      * @return void
260      * @access protected
261      */
262     function _addTitle() {
263         $conf = $this->_config['titulo'];
264         if ($this->titulo) {
265             $tmp = $this->_pdf->strlen($this->titulo, $conf);
266             $tmp2 = $this->_pdf->getWidth($this->_orientacion);
267             if ($tmp >= $tmp2) {
268                 $this->titulo = $this->_pdf->wrapLine ($this->titulo, $tmp2,
269                         $conf);
270                 $tmp = $this->_pdf->strlen($this->titulo, $conf);
271             }
272             $init = ($tmp2 - $tmp) / 2; 
273             $this->_pdf->addText($init, $conf['Y'], $this->titulo, 
274                     $conf, null, $this->_orientacion);
275         }
276     }
277
278     /**
279      * Funcion que permite agregar el subtitulo a una pagina.
280      *
281      * @return void
282      * @access protected
283      */
284     function _addSubTitle() {
285         $conf = $this->_config['subtitulo'];
286         if ($this->subtitulo) {
287             $tmp = $this->_pdf->strlen($this->subtitulo, $conf);
288             $tmp2 = $this->_pdf->getWidth($this->_orientacion);
289             if ($tmp >= $tmp2) {
290                 $this->subtitulo = $this->_pdf->wrapLine ($this->subtitulo, $tmp2,
291                         $conf);
292                 $tmp = $this->_pdf->strlen($this->subtitulo, $conf);
293             }
294             $init = ($tmp2 - $tmp) / 2; 
295             $this->_pdf->addText($init, $conf['Y'], $this->subtitulo, 
296                     $conf, null, $this->_orientacion);
297         }
298     }
299     
300     /**
301      * Funcion que agrega la informacion del marco a la pagina actual.      
302      *
303      * @param bool $title Muetra o no el titulo.
304      * @param bool $subtitle Muestra o no el subtitulo.
305      *
306      * @return void
307      * @access public
308      */
309     function buildPage($title = true, $subtitle = true) {
310         $this->_addLogo();
311         $this->_addSeccion();
312         $this->_addSubseccion();
313         $this->_addPager();
314         $this->_addDate();
315         $this->_addHeaderRectangle();
316         if ($title) {
317             $this->_addTitle();
318         }
319         if ($subtitle) {
320             $this->_addSubTitle();
321         }
322     }
323
324     /**
325      * Funcion que devuelve el espacio dispobible en una pagina.
326      *
327      * @param int $pagina Numero de pagina.
328      *
329      * @return int
330      * @access protected
331      */
332     function _getAvailableSpace($pagina) {
333         if ($pagina === 1 && $this->titulo && $this->subtitulo) {
334             return $this->_config['contenido']['Y'];
335         }
336         else {
337             return $this->_config['titulo']['Y'];
338         }
339     }
340
341 }
342 ?>