]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/PDF/Marco.php
- Le agregue un parametro opcional al constructor de MECON_Dependencia para poder...
[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 = '/home/mmarrese/public_html/meconlib/www/images/pdf_logo.jpg'; 
69     //@FIXME Ponener el path del logo por defecto
70
71     /**
72      * Paginador.
73      * @var bool $paginador
74      * @access public 
75      */
76     var $paginador = true;
77
78     /**
79      * Fecha. Si es true se pone la fecha del servidor, si es false no se pone
80      * nada, en caso contrario se pone lo que haya en esta variable.
81      * @var mixed $fecha
82      * @access public
83      */
84     var $fecha = true;
85     
86     /**
87      * Seccion.
88      * @var string $seccion
89      * @access public 
90      */
91     var $seccion = '';
92
93     /**
94      * SubSeccion.
95      * @var string $subseccion
96      * @access public 
97      */
98     var $subseccion = 'Ministerio de Economia';
99
100     /**
101      * Titulo.
102      * @var string $string
103      * @access public 
104      */
105     var $titulo = true;
106
107     /**
108      * SubTitulo.
109      * @var string $subtitulo
110      * @access public 
111      */
112     var $subtitulo = true;
113
114     /**
115      * Class constructor.
116      *
117      * @param string $tam Tamanio de las hojas.
118      * @param string $ori Orientacion de las hojaz (portrait o landscape).
119      *
120      * @return void
121      * @access public
122      */
123     function MECON_PDF_Marco($tam = "a4", $ori = "portrait") {
124         $this->_pdf =& new MECON_PDF;
125         $this->_tamanio = $tam;
126         $this->_orientacion = $ori;
127         $this->_config = include 'MECON/PDF/Marco/medidas.php' ; 
128         $this->_config = $this->_config[$tam][$ori];
129         $this->MECON_HTML_Tabla();
130     }
131
132     /**
133      * Funcion que agrega el logo al encabezado de una pagina.
134      *
135      * @return void
136      * @access protected
137      */
138     function _addLogo() {
139         $conf = $this->_config['encabezado'];
140         if ($this->logo) {
141             $this->_pdf->addImage($this->logo, $conf['logo']['X'],
142                     $conf['logo']['Y'], null, 'jpg');
143         }
144     }
145
146     /**
147      * Funcion que agrega la seccion al encabezado de una pagina.
148      *
149      * @return void
150      * @access protected
151      */
152     function _addSeccion() {
153         $conf = $this->_config['encabezado'];
154         if ($this->seccion) {
155             $tmp = $this->_pdf->strlen($this->seccion, $conf['seccion']);
156             $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi'];
157             if ($tmp >= $tmp2) {
158                 $this->seccion = $this->_pdf->wrapLine ($this->seccion, $tmp2,
159                         $conf['seccion']);
160                 $tmp = $this->_pdf->strlen($this->seccion, $conf['seccion']);
161             }
162             $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi'] 
163                     - $conf['linea1']['Xi'] - $tmp) / 2; 
164             $this->_pdf->addText($init, $conf['seccion']['Y'], $this->seccion, $conf['seccion']);
165         }
166     }
167    
168     /**
169      * Funcion que agrega la subseccion al encabezado de una pagina.
170      *
171      * @return void
172      * @access protected
173      */
174     function _addSubSeccion() {
175         $conf = $this->_config['encabezado'];
176         if ($this->subseccion) {
177             $tmp = $this->_pdf->strlen($this->subseccion, $conf['subseccion']);
178             $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi'];
179             if ($tmp >= $tmp2) {
180                 $this->subseccion = $this->_pdf->wrapLine ($this->subseccion, $tmp2,
181                         $conf['subseccion']);
182                 $tmp = $this->_pdf->strlen($this->subseccion, $conf['subseccion']);
183             }
184             $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi'] 
185                     - $conf['linea1']['Xi'] - $tmp) / 2; 
186             $this->_pdf->addText($init, $conf['subseccion']['Y'], $this->subseccion, 
187                     $conf['subseccion']);
188         }
189     }
190
191     /**
192      * Funcion que agrega el paginador al encabezado de una pagina.
193      *
194      * @return void
195      * @access protected
196      */
197     function _addPager() {
198         $conf = $this->_config['encabezado'];
199         if ($this->paginador) {
200             $txt = 'Pagina '.$this->_pdf->numPage().' de '.
201                 $this->_pdf->countPages();
202             $tmp = $this->_pdf->strlen($txt, $conf['paginador']);
203             $init = $conf['linea2']['Xi'] + ( $conf['Xf'] 
204                     - $conf['linea2']['Xi'] - $tmp) / 2; 
205             $this->_pdf->addText($init, $conf['paginador']['Y'], $txt, 
206                     $conf['paginador']);
207         }
208     }
209     
210     /**
211      * Funcion que permite agregar la fecha al encabezado de una pagina.
212      *
213      * @return void
214      * @access protected
215      */
216     function _addDate() {
217         $conf = $this->_config['encabezado'];
218         if ($this->fecha) {
219             if ($this->fecha === true) {
220                 $this->fecha = date("d/m/Y");
221             }
222             $tmp = $this->_pdf->strlen($this->fecha, $conf['fecha']);
223             $init = $conf['linea2']['Xi'] + ( $conf['Xf'] 
224                     - $conf['linea2']['Xi'] - $tmp) / 2; 
225             $this->_pdf->addText($init, $conf['fecha']['Y'], $this->fecha,
226                     $conf['fecha']);
227         }
228     }
229     
230     /**
231      * Funcion que arma el recuadro del encabezado de las paginas.
232      * 
233      * @return void
234      * @access protected
235      */
236     function _addHeaderRectangle() {
237         $conf = $this->_config['encabezado'];
238         //Armo el recuadro
239         $this->_pdf->addRectangle ($conf['Yi'], $conf['Xi'], $conf['Yf'], 
240                     $conf['Xf']);
241         $this->_pdf->addLine($conf['linea1']['Xi'], $conf['linea1']['Yi'], 
242                 $conf['linea1']['Xf'], $conf['linea1']['Yf']);
243         $this->_pdf->addLine($conf['linea2']['Xi'], $conf['linea2']['Yi'], 
244                 $conf['linea2']['Xf'], $conf['linea2']['Yf']);
245     }
246     
247     /**
248      * Funcion que permite agregar el titulo a una pagina.
249      *
250      * @return void
251      * @access protected
252      */
253     function _addTitle() {
254         $conf = $this->_config['titulo'];
255         if ($this->titulo) {
256             $tmp = $this->_pdf->strlen($this->titulo, $conf);
257             $tmp2 = $this->_config['Xf'] + abs($this->_config['Xi']);
258             if ($tmp >= $tmp2) {
259                 $this->titulo = $this->_pdf->wrapLine ($this->titulo, $tmp2,
260                         $conf);
261                 $tmp = $this->_pdf->strlen($this->titulo, $conf);
262             }
263             $init = $this->_config['Xi'] + ($tmp2 - $tmp) / 2; 
264             $this->_pdf->addText($init, $conf['Y'], $this->titulo, 
265                     $conf);
266         }
267     }
268
269     /**
270      * Funcion que permite agregar el subtitulo a una pagina.
271      *
272      * @return void
273      * @access protected
274      */
275     function _addSubTitle() {
276         $conf = $this->_config['subtitulo'];
277         if ($this->subtitulo) {
278             $tmp = $this->_pdf->strlen($this->subtitulo, $conf);
279             $tmp2 = $this->_config['Xf'] + abs($this->_config['Xi']);
280             if ($tmp >= $tmp2) {
281                 $this->subtitulo = $this->_pdf->wrapLine ($this->subtitulo, $tmp2,
282                         $conf);
283                 $tmp = $this->_pdf->strlen($this->subtitulo, $conf);
284             }
285             $init = $this->_config['Xi'] + ($tmp2 - $tmp) / 2; 
286             $this->_pdf->addText($init, $conf['Y'], $this->subtitulo, 
287                     $conf);
288         }
289     }
290     
291     /**
292      * Funcion que agrega la informacion del marco a la pagina actual.      
293      *
294      * @param bool $title Muetra o no el titulo.
295      * @param bool $subtitle Muestra o no el subtitulo.
296      *
297      * @return void
298      * @access public
299      */
300     function buildPage($title = true, $subtitle = true) {
301         $this->_addLogo();
302         $this->_addSeccion();
303         $this->_addSubseccion();
304         $this->_addPager();
305         $this->_addDate();
306         $this->_addHeaderRectangle();
307         if ($title) {
308             $this->_addTitle();
309         }
310         if ($subtitle) {
311             $this->_addSubTitle();
312         }
313 //        $this->_pdf->addLine($this->_config['Xi'], $this->_config['Yi'], 
314 //                $this->_config['Xf'], $this->_config['Yi']);
315     }
316
317     /**
318      * Funcion que devuelve el espacio dispobible en una pagina.
319      *
320      * @param int $pagina Numero de pagina.
321      *
322      * @return int
323      * @access protected
324      */
325     function _getAvailableSpace($pagina) {
326         if ($pagina === 1) {
327             return $this->_config['contenido']['Y'];
328         }
329         else {
330             return $this->_config['titulo']['Y'];
331         }
332     }
333
334 }
335 ?>