+ /**
+ * Permite agregar texto contenido que sera puesto al lado de las imagenes.
+ *
+ * @param Object $TEXTO MECON_PDF_Texto.
+ *
+ * @return void
+ * @access public
+ */
+ function agregarContenido($TEXTO) {
+ $this->_contenido[] = $TEXTO;
+ }
+
+ /**
+ * 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 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);
+ if ($this->_contenido && ($this->_align == 'left' ||
+ $this->_align == 'right')) {
+ $this->_contenidoToPdf($MARCO, $tam, $alto);
+ $alto = $MARCO->espacioDisponible;
+ }
+ //Seteo el espacio disponible en la pagina.
+ $MARCO->espacioDisponible = $alto - 2;
+ }
+
+ /**
+ * Agrega al pdf el texto adjunto a la imagen.
+ *
+ * @param &Object $MARCO MECON_PDF_Marco.
+ * @param array $tam Tamaño de la imagen.
+ * @param int $alto Alto disponible en la pagina.
+ *
+ * @return void
+ * @access protected
+ */
+ function _contenidoToPdf(&$MARCO, $tam, $alto) {
+ $ancho_pagina = $MARCO->getWidth($MARCO->refPage(),$MARCO->getOrientation());
+ //Obtengo las coordenadas del espacio disponible que se corresponde con
+ //el tamaño de la imagen.
+ switch ($this->_align) {
+ case 'left':
+ $coord['Xi'] = $tam['width'] + 2;
+ $coord['Xf'] = $ancho_pagina;
+ $coord['Yi'] = $alto;
+ $coord['Yf'] = $alto + $tam['height'];
+ break;
+ case 'right':
+ $coord['Xi'] = 0;
+ $coord['Xf'] = $ancho_pagina - $tam['width'] - 2;
+ $coord['Yi'] = $alto;
+ $coord['Yf'] = $alto + $tam['height'];
+ break;
+ }
+ //Por cada TEXTO agregado.
+ foreach ($this->_contenido as $TEXTO) {
+ $this->_textoToPdf($MARCO, $coord, $alto, $TEXTO);
+ }
+ }
+
+ /**
+ * Agrega objeto por objeto el contenido al pdf general.
+ *
+ * @param &Object $MARCO MECON_PDF_Marco.
+ * @param array $coord Coordenadas para el texto.
+ * @param int $alto Alto disponible en la pagina.
+ * @param Object $TEXTO MECON_PDF_Texto.
+ *
+ * @return void
+ * @access protected
+ */
+ function _textoToPdf(&$MARCO, $coord, $alto, $TEXTO) {
+ //Obtengo los parrafos y estilos del texto
+ $parrafos = $TEXTO->getParrafos();
+ $estilos = $TEXTO->getEstilo();
+ //Obtengo los limites escribibles al lado de la imagen
+ $ancho_texto = $coord['Xf'] - $coord['Xi'] - 2;
+ $alto_texto = $coord['Yf'];
+ //Obtengo el ancho total de la pagina
+ $ancho_pagina = $MARCO->getWidth($MARCO->refPage(),$MARCO->getOrientation());
+ //Por cada parrafo
+ for ($i=0; $i < $TEXTO->cantParrafos(); $i++) {
+ //Veo si hay definido un estilo para el parrafo.
+ if (@!$estilos[$i]) {
+ $estilos[$i] = $TEXTO->getEstiloDefecto();
+ }
+ //Armo un array con el parrafo en donde cada componente es una linea
+ //que cumple con el ancho maximo permitido.
+ //Veo si el texto esta al lado de la imagen o por debajo de esta.
+ if ($alto_texto <= $coord['Yi'] - $estilos[$i]['height']) {
+ $txt = @$MARCO->wordWrap($parrafos[$i], $ancho_pagina - 2,
+ $estilos[$i]);
+ }
+ else {
+ $txt = @$MARCO->wordWrap($parrafos[$i], $ancho_texto,
+ $estilos[$i]);
+ }
+ //Por cada linea
+ if (@$txt) {
+ while (count($txt)) {
+ $t = array_shift($txt);
+ $alto_texto -= $estilos[$i]['height'];
+ //Veo si el texto esta al lado de la imagen o por debajo de
+ //esta.
+ if ($alto_texto <= $coord['Yi'] - $estilos[$i]['height']) {
+ //Veo si ya estaba escribiendo debajo de la imagen.
+ if (@!$tmp) {
+ $tmp = implode(' ', $txt);
+ $txt = @$MARCO->wordWrap($tmp, $ancho_pagina - 2,
+ $estilos[$i]);
+ $t = array_shift($txt);
+ $alto = $alto_texto;
+ }
+ else {
+ $alto -= $estilos[$i]['height'];
+ }
+ //Veo si hay que agragar una nueva pagina.
+ if ($alto <= 0) {
+ $this->_newPage($MARCO);
+ $alto = $MARCO->espacioDisponible;
+ }
+ //Calculo el X en donde debo comenzar a escribir segun
+ //la alineacion del texto.
+ if (@$estilos[$i]['align'] == 'center') {
+ $tam = @$MARCO->strlen($t, $estilos[$i]);
+ $init = ($ancho_pagina - $tam) / 2;
+ }
+ elseif (@$estilos[$i]['align'] == 'right') {
+ $tam = @$MARCO->strlen($t, $estilos[$i]);
+ $init = $ancho_pagina - $tam + 1;
+ }
+ else {
+ $init = 0;
+ }
+ $MARCO->addText($init, $alto + 2, $t, $estilos[$i],
+ null, $this->_orientacion);
+ }
+ else {
+ //Estoy escribiendo al lado de la imagen.
+ //Calculo el X en donde debo comenzar a escribir segun
+ //la alineacion del texto.
+ if (@$estilos[$i]['align'] == 'center') {
+ $tam = @$MARCO->strlen($t, $estilos[$i]);
+ $init = ($ancho_texto - $tam) / 2;
+ }
+ elseif (@$estilos[$i]['align'] == 'right') {
+ $tam = @$MARCO->strlen($t, $estilos[$i]);
+ $init = $ancho_texto - $tam + 3;
+ }
+ else {
+ $init = 2;
+ }
+
+ $init += $coord['Xi'];
+
+ $MARCO->addText($init, $alto_texto + 2, $t, $estilos[$i],
+ null, $this->_orientacion);
+ }
+ }
+ }
+ }
+ //Seteo el nuevo alto de la pagina.
+ $MARCO->espacioDisponible = $alto;
+ }
+
+ /**
+ * 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;
+ }
+
+ /**
+ * 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);
+ }