]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/PDF/Marco.php
Agrego la posibilidad de utilizar mecon_html_icon con cualquier imagen.
[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/PDF/Separador.php';
29 require_once 'MECON/PDF/HeaderDefecto.php';
30
31 /**
32  * Libreria que crea un marco estandar para los pdfs.
33  */
34 class MECON_PDF_Marco extends MECON_PDF {
35
36     /**
37      * Objeto MECON_PDF_Separador que se utilizara por defecto.
38      * @var Object $separador
39      * @access protected
40      */
41     var $_separador_defecto;
42
43     /**
44      * Array de objetos MECON_PDF_Contenido
45      * @var array $contenido
46      * @access protected
47      */
48     var $_contenido = array();
49     
50     /**
51      * Espacio dispobible en la pagina. Representa la coordenada Y a partir de
52      * la cual se puede comenzar a escribir el contenido.
53      * @var int $espacioDisponible
54      * @access public
55      */
56     var $espacioDisponible;
57
58     /**
59      * Logo.
60      * @var string $logo
61      * @access public
62      */
63     var $logo; 
64
65     /**
66      * Paginador.
67      * @var bool $paginador
68      * @access public 
69      */
70     var $paginador = true;
71
72     /**
73      * Fecha. Si es true se pone la fecha del servidor, si es false no se pone
74      * nada, en caso contrario se pone lo que haya en esta variable.
75      * @var mixed $fecha
76      * @access public
77      */
78     var $fecha = true;
79     
80     /**
81      * Seccion.
82      * @var string $seccion
83      * @access public 
84      */
85     var $seccion = '';
86
87     /**
88      * SubSeccion.
89      * @var string $subseccion
90      * @access public 
91      */
92     var $subseccion = 'Ministerio de Economia';
93
94     /**
95      * Titulo.
96      * @var string $string
97      * @access public 
98      */
99     var $titulo;
100
101     /**
102      * SubTitulo.
103      * @var string $subtitulo
104      * @access public 
105      */
106     var $subtitulo;
107
108     /**
109      * Excepciones al encabezado
110      * @var array $excepciones
111      * @access protected
112      */
113     var $_excepciones = array ();
114
115     /**
116      * MECON_PDF_Header. Objeto que hay que utilizar como enzabezado. Si hay
117      * algo aqui se desecha el encabezado por defecto.
118      * @var Object $header
119      * @access public
120      */
121     var $header = null;
122      
123     /**
124      * Class constructor.
125      *
126      * @param string $tam Tamanio de las hojas.
127      * @param string $ori Orientacion de las hojaz (portrait o landscape).
128      * @param string $nom Nombre del archivo.
129      *
130      * @return void
131      * @access public
132      */
133     function MECON_PDF_Marco($tam = "a4", $ori = "portrait", $nom = 'Doc.pdf') {
134         $this->MECON_PDF($tam, $ori, $nom);
135         $this->tamanio = $tam;
136         $this->_resetConf();
137         $this->_separador_defecto =& new MECON_PDF_Separador();
138     }
139
140     /**
141      *  Funcion que setea los valores de conf para poder poner las cabeceras
142      *  @access private
143      *  @param int $pagina numero del la pagina de la que debe setear loa
144      *  valores
145      *  @return void
146      */
147     function _resetConf($pagina = null)
148     {
149         if(is_null($pagina));
150             $pagina = $this->numPage();
151         $tmp = include 'MECON/PDF/Marco/medidas.php' ; 
152         $tmp = $tmp[$this->tamanio][$this->getOrientation($pagina)];
153         $tmp['Xi'] = $this->_config['Xi'];
154         $tmp['Yi'] = $this->_config['Yi'];
155         $tmp['Xf'] = $this->_config['Xf'];
156         $tmp['Yf'] = $this->_config['Yf'];
157         $this->_config = $tmp;
158     }
159
160     /**
161      * Permite agregar nuevas paginas al pdf que se esta armando.
162      *
163      * @param string $pagina Tipo de pagina que se va a utilizar.
164      * @param string $orientacion Orientacion de la hoja
165      * @param bool $encabezado Indica si el encabezado debe ponerse en la
166      * pagina.
167      * @param string $seccion Seccion del encabezado para esta pagina nueva.
168      * @param string $subseccion SubSeccion del encabezado para esta pagina 
169      * nueva.
170      *
171      * @return void
172      * @access public
173      */
174     function newPage($pagina = 'a4', $orientacion = null, $encabezado = true, 
175             $seccion = null, $subseccion = null) {   
176         parent::newPage($pagina, $orientacion);
177         $this->_resetConf();
178         if ($encabezado) {
179             $this->espacioDisponible = $this->header->getAltura() - 27;
180             if ($this->countPages() === 1) {
181                 if ($this->titulo || $this->subtitulo) {
182                     $this->espacioDisponible -= 27;
183                 }
184             }
185             if (!is_null($seccion)) {
186                 $this->_excepciones[$this->numPage()]['seccion'] = $seccion;
187             }
188             if (!is_null($subseccion)) {
189                 $this->_excepciones[$this->numPage()]['subseccion'] = $subseccion;
190             }
191         }
192         else {
193             $this->espacioDisponible = $this->_config['Yf'];
194             $this->_excepciones[$this->countPages()]['nova'] = true;
195             
196         }
197     }
198
199     /**
200      * Funcion que permite agregar el titulo a una pagina.
201      *
202      * @return void
203      * @access protected
204      */
205     function _addTitle() {
206         $this->_resetConf();
207         $conf = $this->_config['titulo'];
208         if ($this->titulo) {
209             $tmp = $this->strlen($this->titulo, $conf);
210             $tmp2 = $this->getWidth();
211             if ($tmp >= $tmp2) {
212                 $this->titulo = $this->wrapLine ($this->titulo, $tmp2,
213                         $conf);
214                 $tmp = $this->strlen($this->titulo, $conf);
215             }
216             $init = ($tmp2 - $tmp) / 2; 
217             $this->addText($init, $conf['Y'], $this->titulo, 
218                     $conf);
219         }
220     }
221
222     /**
223      * Funcion que permite agregar el subtitulo a una pagina.
224      *
225      * @return void
226      * @access protected
227      */
228     function _addSubTitle() {
229         $this->_resetConf();
230         $conf = $this->_config['subtitulo'];
231         if ($this->subtitulo) {
232             $tmp = $this->strlen($this->subtitulo, $conf);
233             $tmp2 = $this->getWidth();
234             if ($tmp >= $tmp2) {
235                 $this->subtitulo = $this->wrapLine ($this->subtitulo, $tmp2,
236                         $conf);
237                 $tmp = $this->strlen($this->subtitulo, $conf);
238             }
239             $init = ($tmp2 - $tmp) / 2; 
240             $this->addText($init, $conf['Y'], $this->subtitulo, 
241                     $conf);
242         }
243     }
244     
245     /**
246      * Funcion que agrega el encabezado a la pagina actual.      
247      *
248      * @param bool $title Muetra o no el titulo.
249      * @param bool $subtitle Muestra o no el subtitulo.
250      *
251      * @return void
252      * @access protected
253      */
254     function _buildHeader($title = true, $subtitle = true) {
255         //Agrego el header.
256         $this->header->toPdf($this);
257         if ($title) {
258             $this->_addTitle();
259         }
260         if ($subtitle) {
261             $this->_addSubTitle();
262         }
263     }
264
265     /**
266      * Funcion que crea el Header por defecto.
267      *
268      * @return void
269      * @access protected
270      */
271     function _crearHeaderDefecto() {
272         $this->header =& new MECON_PDF_HeaderDefecto($this->tamanio,
273                 $this->getOrientation($this->numPage()));
274         if (@$this->logo) {
275             $this->header->logo = $this->logo;
276         }
277         $this->header->seccion = $this->seccion;
278         $this->header->subseccion = $this->subseccion;
279         $this->header->paginador = $this->paginador;
280         $this->header->fecha = $this->fecha;
281     }
282     
283     /**
284      * Funcion que agrega el contenido al PDF.
285      *
286      * @return void
287      * @access protected
288      */
289     function _buildContent() {
290         $this->_resetConf();
291         if ($this->_contenido) {
292             foreach ($this->_contenido as $cont) {
293                 $cont->toPDF($this); 
294                 //MECON_PDF_Marco se pasa por referencia para que se agregen las
295                 //paginas a medida que se van necesitando. Esto permite que varie el
296                 //tipo de contenido que se agrega.
297             }
298         }
299     }
300
301     /**
302      * Funcion que se encarga de transformar la informacion para que se genere
303      * el archivo pdf.
304      *
305      * @return pdffile Archivo PDF.
306      * @access public
307      */
308     function toPDF() {
309         //Veo si hay que utilizar o no el header por defecto.
310         if (!$this->header) {
311             $this->_crearHeaderDefecto();
312         }
313         
314         $this->_buildContent();
315         if ($this->getPages()) {
316             $t = true;
317             foreach ($this->getPages() as $page) {
318                 $this->_pagina_actual = $page;
319                 
320                 $sec = $this->header->seccion;
321                 $subsec = $this->header->subseccion;
322                 
323                 if (@$this->_excepciones[$this->numPage($page)]['seccion']) {
324                     $this->header->seccion = 
325                         $this->_excepciones[$this->numPage($page)]['seccion'];
326                 }
327                 
328                 if (@$this->_excepciones[$this->numPage($page)]['subseccion']) {
329                     $this->header->subseccion = 
330                         $this->_excepciones[$this->numPage($page)]['subseccion'];
331                 }
332                 
333                 if (@!$this->_excepciones[$this->numPage($page)]['nova']) {
334                     $this->_buildHeader($t, $t);      
335                 }
336                 //Solo agrego el titulo y subtitulo en la primer hoja
337                 $t = false;
338                 
339                 $this->header->seccion = $sec;
340                 $this->header->subseccion = $subsec;
341             }
342         return parent::toPDF();
343         }
344     }
345
346     /**
347      * Funcion que pemite agregar contenido al PDF.
348      *
349      * @param mixed $contenido Objeto contenido que se agrega.
350      * @param bool $separador Indicacion si hay que agregar un separador.
351      *
352      * @return void
353      * @access public
354      */
355     function addContent($contenido, $separador = true) {
356         //Me aseguro de poner el separador siempre y cuando no sea el primer
357         //objeto de la primer pagina.
358         if ($separador && $this->_contenido) {
359             $this->_contenido[] = $this->_separador_defecto;
360         }
361         $this->_contenido[] = $contenido;
362     }
363 }
364 ?>