1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
5 -------------------------------------------------------------------------------
6 This file is part of meconlib.
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)
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.
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 -------------------------------------------------------------------------------
25 -----------------------------------------------------------------------------*/
27 require_once 'MECON/PDF/Contenido.php';
30 * Libreria de imagenes para PDF.
32 class MECON_PDF_Imagen extends MECON_PDF_Contenido {
35 * Imagen de Image_Transform.
36 * @var string $resource
42 * Alineacion de la imagen.
49 * Orientacion de las nuevas paginas
50 * @var string $orientacion
56 * Indica si el encabezado debe ir en la nuevas paginas.
57 * @var bool $encabezado
63 * Array de parametros que utiliza la libreria.
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
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.
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;
93 * Permite rotar la imagen n grados.
95 * @param int $grados Grados de rotación.
100 function rotar($grados) {
101 $this->_param['rotation'] = $grados;
105 * Funcion que se encarga de crear las nuevas paginas.
107 * @param &Object $MARCO MECON_PDF_Marco
112 function _newPage(&$MARCO) {
113 $tmp = ($this->_orientacion) ? $this->_orientacion :
114 $MARCO->getOrientation();
115 $MARCO->newPage($MARCO->tamanio, $tmp, $this->_encabezado);
119 * Funcion que agrega el contenido de la tabla que se este utilizando al
122 * @param &Object $MARCO MECON_PDF_Marco
127 function toPDF(&$MARCO) {
128 //Obtengo el tamaño de la imagen
129 $tam['width'] = $this->_resource->getImageWidth();
130 $tam['height'] = $this->_resource->getImageHeight();
132 //Obtengo el espacio disponible en la pagina
133 $alto = $MARCO->espacioDisponible;
135 //Veo si tengo que crear una nueva pagina.
137 $this->_newPage($MARCO);
138 $alto = $MARCO->espacioDisponible;
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();
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;
152 //Veo si entra en el alto disponible
153 if ($alto - $tam['height'] <= 0) {
154 $this->_resource->scaleByY($alto);
156 //Veo si entra en el ancho disponible
157 if ($ancho_pagina <= $tam['width']) {
158 $this->_resource->scaleByX($anchoPagina);
161 //Obtego el nombre temporal
162 $tmp_path = tempnam('/tmp/', 'MECON_PDF_Images_');
164 //Salvo la imagen temporalmente
165 $this->_resource->save($tmp_path, 'png');
167 //Obtengo la posicion Y
168 $alto -= $tam['height'];
170 //Obtengo la posicion X
171 $X = $this->_X($MARCO, $tam['width']);
174 $MARCO->addImage($tmp_path, $X, $alto, null, 'png', $this->_orientacion,
177 $MARCO->espacioDisponible = $alto - 2;
181 * Permite obtener el valor X segun la alineacion.
183 * @param &Object $MARCO MECON_PDF_Marco.
184 * @param int width Ancho de la imagen a agregar.
189 function _X(&$MARCO, $width) {
190 $ancho_pagina = $MARCO->getWidth($MARCO->refPage(),$MARCO->getOrientation());
191 switch ($this->_align) {
196 $X = ($ancho_pagina / 2) - ($width / 2);
199 $X = $ancho_pagina - $width;