Ver Mensaje Individual
  #12 (permalink)  
Antiguo 28/12/2009, 13:52
Avatar de Christatos
Christatos
 
Fecha de Ingreso: julio-2003
Ubicación: Badajoz, Extremadura, España
Mensajes: 194
Antigüedad: 21 años, 8 meses
Puntos: 0
Respuesta: Generar informes desde PHP

Hola, señores!

Hace mucho tiempo que no programo en PHP, y me ha sorprendido ver ahora, a estas fechas, respuestas sobre el post este concreto, pero me he preocupado en buscar dónde tenía esa función que hice y la he encontrado (los informáticos tenemos el síndrome de Diógenes digital, jejeje, lo guardamos todo). Ahí va a ver a quién le puede resultar útil:

La función en cuestión la coloqué por encima de la de loadTemplate que está en el fichero class.ezpdf.php. Hace mucho que no uso estas herramientas y que no programo en php, pero bueno. No sé si no habrá ya alguna función que sea mejor que esta e, incluso, no sé si quizás esta función, al colocarla en ese fichero si la clase ya es mucho más moderna que la que yo usé en tiempo... a lo mejor ni funciona. A ver si tenéis suerte:

Código:
// ------------------------------------------------------------------------------
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//			Función híbrida entre addImageFromFile, que permite colocarla, orientarla... y un largo etc 			//
//				y la ezImage, que permite abrir archivos remotos (TMP)												//
//			Marcos Morales Rodrigo																					//
//				[email protected]																				//
//				Versión: 1.0																						//
//				Abril de 2004																						//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	Parámetros:																										//
//		Puesto que el addJpegFromFile requiere de:																	//
//			- $img: que será la cadena de caracteres o el propio temporal, por ser más concretos					//
//			- $x:	que serán las ordenadas																			//
//			- $y:	que serán las abscisas																			//
//			- $w:	que será el ancho de la imagen																	//
//			- $h:	que será el alto de la imagen																	//
//		Voy a pasarle a mrcHibridImg (versión algo más potente de ezImage) más parámetros de los que permite:		//
//		ezImage permite:																							//
//			- $image:	obvio...																					//
//			- $pad:		que, por defecto, establece a 5, y será el espacio entre la imágen y lo que le rodea		//
//			- $width:	que es el ancho																				//
//			- $resize:	que lo pasan como algo nuevo, su funcionamiento es sencillo: éste parámetro marca las 		//
//						proporciones a seguir entre Width y Height con diferentes comportamientos y/o tamaños		//
//						de la imagen, de esta forma, sólo con decirle el width y el parámetro resize, la imagen		//
//						se transformará en "un fondo de página" u otras cosas...									//
//			- $just:	otro parámetro más parecido al anterior, pero con otra funcionalidad, ésta es la de 		//
//						colocarlo en el centro, a la izquierda, a la derecha... pero no permite colocarlo 			//
//						manualmente y es, precisamente, ahí donde radica el problema del ezImage y por lo que 		//
//						he optado por crear mrcHibridImg															//
//			- $border:	obvio, ¿no? Este parámetro marca el borde de la imágen, resulta muy útil para delimitar 	//
//						un logotipo de aspecto sólido y sencillo (un cuadrado, un rectángulo, un triángulo...		//
//		Modificaciones para convertir ezImage en mrcHibridImg:														//
//			Parámetros:																								//
//				- $image:	obviamente...																			//
//				- $pad:		también lo voy a establecer por defecto a 5												//
//				- $width:	necesito el ancho																		//
//				- $height:	también quiero el alto, estos dos parámetros van a sustituir a las proporcionalidade	//
//							del $resize																				//
//				- $resize:	No lo voy a utilizar																	//
//				- $just:	No lo voy a utilizar, de hecho, lo voy a sustituir por:									//
//							- $x:	me vendrá muy bien poder colocarlo allá donde desee sin atender a márgenes ni 	//
//									espacios (para las ordenadas)													//
//							- $y:	idem... (para las abscisas)														//
//				- $border:	al igual que $pad, voy a conservar su funcionalidad										//
//				- $max:		valor máximo de altura o anchura, da igual, la función averigurará sola si se debe		//
//							proporcionar la anchura o la altura, dependiendo de cuál sea la mayor, si vale 0, se 	//
//							supone que no se debe proporcionar y hace caso al $width y el $height pasados			//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function mrcHibridImg($image,$pad = 5,$width = 0,$height = 0,$max = 0,$x = 0,$y = 0,$border = '')
{
	//mrcHibridImg versión beta
	$cont = "";
	$temp = "";
	if (stristr($image,'://'))	//Para copiarlo a un archivo temporal
	{
		$fp = @fopen($image,"rb");
		while(!feof($fp))
   		{
      			$cont.= fread($fp,1024);
   		}
   		fclose($fp);
		$image = tempnam ("/tmp", "php-pdf");
		$fp2 = @fopen($image,"w");
   		fwrite($fp2,$cont);
  		fclose($fp2);
		$temp = true;
	}

	if (!(file_exists($image))) return false; 	//Salir de la función si no existe la imagen, si ha llegado aquí y debería de seguir 
												//porque puede asegurar que los parámetros son correctos y están completos, entonces
												//debe revisar, muy probablemente el directorio de temporales de su sistema operativo 
												//y revisar si se crea el fichero tempora. Puede que tenga conflictos de rutas o 
												//permisos. No debe fallar.
	$imageInfo = getimagesize($image);
	switch ($imageInfo[2]){
		case 2:
			$type = "jpeg";
			break;
		case 3:
			$type = "png";
			break;
		default:
			return false; //Salir si no es ni jpeg, ni png
	}
	
	//Sacar el valor mayor entre el ancho y el alto de la imágen (el temporal), y, si $max es distinto de 0, proporcionar:
	if ($max!=0)
		{
			$wtmp =	$imageInfo[0]; 
			$htmp = $imageInfo[1];
			if ($wtmp > $htmp)
				{
					$htmp = ($max * $htmp) / $wtmp;	//Regla de tres
					$wtmp = $max;
				}
			elseif ($wtmp < $htmp)
				{
					$wtmp = ($max * $wtmp) / $htmp;	//Regla de tres
					$htmp = $max;
				}
			elseif ($wtmp == $htmp)
				{
					$htmp = $max;
					$wtmp = $max;
				}
			$width = $wtmp;
			$height = $htmp;
		}
		
	//Llamada a la función que corresponda:
	if ($type == "jpeg"){
		$this->addJpegFromFile($image,$x,$y,$width,$height);
	}

	if ($type == "png"){
		$this->addPngFromFile($image,$x,$y,$width,$height);
	}
	//Dibujar el borde:
	if ($border != '')
	{
	if (!(isset($border['color'])))
	{
		$border['color']['red'] = .5;
		$border['color']['blue'] = .5;
		$border['color']['green'] = .5;
	}
	if (!(isset($border['width']))) $border['width'] = 1;
	if (!(isset($border['cap']))) $border['cap'] = 'round';
	if (!(isset($border['join']))) $border['join'] = 'round';
	

	$this->setStrokeColor($border['color']['red'],$border['color']['green'],$border['color']['blue']);
	$this->setLineStyle($border['width'],$border['cap'],$border['join']);
	$this->rectangle($this->ez['leftMargin'] + $pad + $offset, $this->y + $this->getFontHeight($this->ez['fontSize']) - $pad - $height,$width,$height);

	}
	//---Aún tengo que averiguar para qué serviría esto...---//
	//// move y below image
	//$this->y = $this->y - $pad - $height;
	
	//Borramos el archivo temporal, desvinculándolo de la variable: 
	//		(en realidad no se borra, sino que se "olvida" y libera la variable de memoria)
	if ($temp == true) unlink($image);

}
// ------------------------------------------------------------------------------
Ojalá os sirva.
Un saludo!!