]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/PDF/Imagen.php
- Cambio el uso de ->_database del mtodo getDependencias para permitir que
[mecon/meconlib.git] / lib / MECON / PDF / Imagen.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: jue nov  6 16:13:38 ART 2003
22 Autor:  Martin Marrese <mmarre@mecon.gov.ar>
23 -------------------------------------------------------------------------------
24 $Id$
25 -----------------------------------------------------------------------------*/
26
27 require_once 'MECON/PDF/Contenido.php';
28
29 /**
30  * Libreria de imagenes para PDF.
31  */
32 class MECON_PDF_Imagen extends MECON_PDF_Contenido {
33
34     /**
35      * Imagen de Image_Transform.
36      * @var string $resource
37      * @access protected
38      */
39     var $_resource;
40     
41     /**
42      * Alineacion de la imagen.
43      * @var string $align
44      * @access protected
45      */
46     var $_align;
47
48     /**
49      * Orientacion de las nuevas paginas
50      * @var string $orientacion  
51      * @access protected
52      */
53     var $_orientacion;
54
55     /**
56      * Indica si el encabezado debe ir en la nuevas paginas.
57      * @var bool $encabezado
58      * @access protected
59      */
60     var $_encabezado;
61
62     /**
63      * Array de parametros que utiliza la libreria.
64      * @var array $param
65      * @access protected
66      */
67     var $_param;
68
69     /**
70      * Class Constructor
71      *
72      * @param string $resource Imagen de Image_Transform.
73      * @param string $align Alineacion de la imagen (left, center, right).
74      * @param string $orientacion Orientacion que tendran las nuevas paginas que
75      *                            esta clase genere.
76      * @param bool $encabezado Indica si las paginas nuevas que genere esta
77      *                         clase tendran el encabezado de MECON_PDF_Marco.
78      * @param array $param Parametros de la imagen.
79      *
80      * @return void
81      * @access public
82      */
83     function MECON_PDF_Imagen($resource = null, $align = "center", $orientacion =
84             null, $encabezado = true, $param = array()) {
85         $this->_resource = $resource;
86         $this->_align = $align;
87         $this->_orientacion = $orientacion;
88         $this->_encabezado = $encabezado;
89         $this->_param = $param;
90     }
91
92     /**
93      * Permite rotar la imagen n grados.
94      *
95      * @param int $grados Grados de rotación.
96      *
97      * @return mixed
98      * @access public
99      */
100     function rotar($grados) {
101         $this->_param['rotation'] = $grados;
102     }
103    
104     /**
105      * Funcion que se encarga de crear las nuevas paginas.
106      *
107      * @param &Object $MARCO MECON_PDF_Marco
108      *
109      * @return void
110      * @access protected
111      */
112     function _newPage(&$MARCO) {
113         $tmp = ($this->_orientacion) ? $this->_orientacion :
114             $MARCO->getOrientation();
115         $MARCO->newPage($MARCO->tamanio, $tmp, $this->_encabezado);               
116     }
117    
118     /**
119      * Funcion que agrega el contenido de la tabla que se este utilizando al
120      * PDF.
121      *
122      * @param &Object $MARCO MECON_PDF_Marco
123      *
124      * @return void
125      * @access public
126      */
127     function toPDF(&$MARCO) {
128         //Obtengo el tamaño de la imagen
129         $tam['width']  = $this->_resource->getImageWidth();
130         $tam['height'] = $this->_resource->getImageHeight();
131
132         //Obtengo el espacio disponible en la pagina
133         $alto = $MARCO->espacioDisponible;
134
135         //Veo si tengo que crear una nueva pagina.
136         if ($alto <= 0 ) {
137             $this->_newPage($MARCO);
138             $alto = $MARCO->espacioDisponible;
139         }
140
141         //Obtengo los valores de la pagina
142         $ancho_pagina = $MARCO->getWidth($MARCO->refPage(),$MARCO->getOrientation());
143         $alto_pagina = $MARCO->getHeight($MARCO->refPage(),$MARCO->getOrientation());
144         $orientacion = $MARCO->getOrientation();
145
146         //Veo si me alcanza el tamaño para agregarlo en lo que me queda de la
147         //pagina (chequeando que no sea una pagina nueva)
148         if (($alto - $tam['height'] <= 0) && ($alto != $alto_pagina)) {
149             $this->_newPage($MARCO);
150             $alto = $MARCO->espacioDisponible;
151         }
152         //Veo si entra en el alto disponible
153         if ($alto - $tam['height'] <= 0) {
154             $this->_resource->scaleByY($alto);
155         }
156         //Veo si entra en el ancho disponible
157         if ($ancho_pagina <= $tam['width']) {
158             $this->_resource->scaleByX($anchoPagina);
159         }
160
161         //Obtego el nombre temporal
162         $tmp_path = tempnam('/tmp/', 'MECON_PDF_Images_');
163         
164         //Salvo la imagen temporalmente
165         $this->_resource->save($tmp_path, 'png');
166         
167         //Obtengo la posicion Y
168         $alto -= $tam['height'];
169         
170         //Obtengo la posicion X
171         $X = $this->_X($MARCO, $tam['width']);
172         
173         //Agrego la imagen
174         $MARCO->addImage($tmp_path, $X, $alto, null, 'png', $this->_orientacion,
175                 $this->_param);
176         
177         $MARCO->espacioDisponible = $alto - 2;
178     }
179
180     /**
181      * Permite obtener el valor X segun la alineacion.
182      *
183      * @param &Object $MARCO MECON_PDF_Marco.
184      * @param int width Ancho de la imagen a agregar.
185      *
186      * @return int
187      * @access public
188      */
189     function _X(&$MARCO, $width) {
190         $ancho_pagina = $MARCO->getWidth($MARCO->refPage(),$MARCO->getOrientation());
191         switch ($this->_align) {
192             case 'left':
193                 $X = 0;
194                 break;
195             case 'center':
196                 $X = ($ancho_pagina / 2) - ($width / 2);
197                 break;
198             case 'right':
199                 $X = $ancho_pagina - $width;
200                 break;
201         }
202         return $X;
203     }
204 }
205 ?>