* Libreria de imagenes para PDF.
*/
class MECON_PDF_Imagen extends MECON_PDF_Contenido {
+
+ /**
+ * Imagen de Image_Transform.
+ * @var string $resource
+ * @access protected
+ */
+ var $_resource;
+ /**
+ * Alineacion de la imagen.
+ * @var string $align
+ * @access protected
+ */
+ var $_align;
+
+ /**
+ * Orientacion de las nuevas paginas
+ * @var string $orientacion
+ * @access protected
+ */
+ var $_orientacion;
+
+ /**
+ * Indica si el encabezado debe ir en la nuevas paginas.
+ * @var bool $encabezado
+ * @access protected
+ */
+ var $_encabezado;
+
+ /**
+ * Array de parametros que utiliza la libreria.
+ * @var array $param
+ * @access protected
+ */
+ var $_param;
+
+ /**
+ * Class Constructor
+ *
+ * @param string $resource Imagen de Image_Transform.
+ * @param string $align Alineacion de la imagen (left, center, right).
+ * @param string $orientacion Orientacion que tendran las nuevas paginas que
+ * esta clase genere.
+ * @param bool $encabezado Indica si las paginas nuevas que genere esta
+ * clase tendran el encabezado de MECON_PDF_Marco.
+ * @param array $param Parametros de la imagen.
+ *
+ * @return void
+ * @access public
+ */
+ function MECON_PDF_Imagen($resource = null, $align = "center", $orientacion =
+ null, $encabezado = true, $param = array()) {
+ $this->_resource = $resource;
+ $this->_align = $align;
+ $this->_orientacion = $orientacion;
+ $this->_encabezado = $encabezado;
+ $this->_param = $param;
+ }
+
+ /**
+ * Permite rotar la imagen n grados.
+ *
+ * @param int $grados Grados de rotación.
+ *
+ * @return mixed
+ * @access public
+ */
+ function rotar($grados) {
+ $this->_param['rotation'] = $grados;
+ }
+
+ /**
+ * Funcion que se encarga de crear las nuevas paginas.
+ *
+ * @param &Object $MARCO MECON_PDF_Marco
+ *
+ * @return void
+ * @access protected
+ */
+ function _newPage(&$MARCO) {
+ $tmp = ($this->_orientacion) ? $this->_orientacion :
+ $MARCO->getOrientation();
+ $MARCO->newPage($MARCO->tamanio, $tmp, $this->_encabezado);
+ }
+
+ /**
+ * Funcion que agrega el contenido de la tabla que se este utilizando al
+ * PDF.
+ *
+ * @param &Object $MARCO MECON_PDF_Marco
+ *
+ * @return void
+ * @access public
+ */
+ function toPDF(&$MARCO) {
+ //Obtengo el tamaño de la imagen
+ $tam['width'] = $this->_resource->getImageWidth();
+ $tam['height'] = $this->_resource->getImageHeight();
+
+ //Obtengo el espacio disponible en la pagina
+ $alto = $MARCO->espacioDisponible;
+
+ //Veo si tengo que crear una nueva pagina.
+ if ($alto <= 0 ) {
+ $this->_newPage($MARCO);
+ $alto = $MARCO->espacioDisponible;
+ }
+
+ //Obtengo los valores de la pagina
+ $ancho_pagina = $MARCO->getWidth($MARCO->refPage(),$MARCO->getOrientation());
+ $alto_pagina = $MARCO->getHeight($MARCO->refPage(),$MARCO->getOrientation());
+ $orientacion = $MARCO->getOrientation();
+
+ //Veo si me alcanza el tamaño para agregarlo en lo que me queda de la
+ //pagina (chequeando que no sea una pagina nueva)
+ if (($alto - $tam['height'] <= 0) && ($alto != $alto_pagina)) {
+ $this->_newPage($MARCO);
+ $alto = $MARCO->espacioDisponible;
+ }
+ //Veo si entra en el alto disponible
+ if ($alto - $tam['height'] <= 0) {
+ $this->_resource->scaleByY($alto);
+ }
+ //Veo si entra en el ancho disponible
+ if ($ancho_pagina <= $tam['width']) {
+ $this->_resource->scaleByX($anchoPagina);
+ }
+
+ //Obtego el nombre temporal
+ $tmp_path = tempnam('/tmp/', 'MECON_PDF_Images_');
+
+ //Salvo la imagen temporalmente
+ $this->_resource->save($tmp_path, 'png');
+
+ //Obtengo la posicion Y
+ $alto -= $tam['height'];
+
+ //Obtengo la posicion X
+ $X = $this->_X($MARCO, $tam['width']);
+
+ //Agrego la imagen
+ $MARCO->addImage($tmp_path, $X, $alto, null, 'png', $this->_orientacion,
+ $this->_param);
+
+ $MARCO->espacioDisponible = $alto - 2;
+ }
+
+ /**
+ * Permite obtener el valor X segun la alineacion.
+ *
+ * @param &Object $MARCO MECON_PDF_Marco.
+ * @param int width Ancho de la imagen a agregar.
+ *
+ * @return int
+ * @access public
+ */
+ function _X(&$MARCO, $width) {
+ $ancho_pagina = $MARCO->getWidth($MARCO->refPage(),$MARCO->getOrientation());
+ switch ($this->_align) {
+ case 'left':
+ $X = 0;
+ break;
+ case 'center':
+ $X = ($ancho_pagina / 2) - ($width / 2);
+ break;
+ case 'right':
+ $X = $ancho_pagina - $width;
+ break;
+ }
+ return $X;
+ }
}
?>
\ No newline at end of file