Foros del Web » Programando para Internet » PHP »

Generar informes desde PHP

Estas en el tema de Generar informes desde PHP en el foro de PHP en Foros del Web. Hola, compañeros! Aquí estoy otra vez dando la tabarra... Esta vez, visto el poco éxito que voy teniendo, me replanteo todo desde el principio: ¿Alguien ...
  #1 (permalink)  
Antiguo 06/04/2004, 03:51
Avatar de Christatos  
Fecha de Ingreso: julio-2003
Ubicación: Badajoz, Extremadura, España
Mensajes: 194
Antigüedad: 20 años, 9 meses
Puntos: 0
Generar informes desde PHP

Hola, compañeros!
Aquí estoy otra vez dando la tabarra...
Esta vez, visto el poco éxito que voy teniendo, me replanteo todo desde el principio: ¿Alguien sabe cómo generar un informe desde php? Un informe podría ser una factura, un albarán, un listado... en definitiva, cualquier cosa.
He probado con pdf's y php:
-pdflib
-fpdf
-pdf de R&OS
Ninguno me han dado lo que necesito, pdflib y fpdf porque, a pesar de ser asequibles y sencillos (además de muy potentes) tenían la pega de que ninguno era capaz de interpretarme como una imágen un código así: http://servidor/dirvirt/subdir/pagin...&var2=valor...
El único capaz ha sido ezImage() en el pdf de R&OS, pero esta función tiene una pega muy grande y es que soy incapaz de colocar esa imágen y redimiensionar la altura y anchura por separado. No tiene un parámetro específico para colocarla en el lugar "punto a punto" que tú decidas dentro de tu "papel"... y, además cuenta a la hora de los márgenes, con lo cuál descoloca el resto de cosas...
Si alguien, por caridad bendita, tiene a bien ayudarme, se lo agradeceré eternamente...
Si alguien sabe cómo hacer informes, aunque no sea con pdf, que queden curiosos y profesionales o si alguien sabe cómo o qué función hay que utilizar en alguna de esas tres librerías de clases de pdf que he utilizado para lo que quiero... por favor, espero vuestras respuestas. ¡Gracias a todos!
  #2 (permalink)  
Antiguo 06/04/2004, 06:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
A veces .. classes como las que propones que dispongan de métodos para (por ejemplo) incrustrar una imagen en un documento no siempre van a procesar todo lo que le entregues así que lo ideal es ver que es lo que requiere tu método y desde ahí ver que es lo que tienes tu y adaptarlo.

Por ejemplo .. Dices que no puedes "redimensionar" una imagen con R&OS y su método ezImage() .. Ok, .. pero si ves el problema desde el punto de vista que te comenté .. verías que ese método no hace lo que buscas .. pues tendrás que hacerlo por otro lado . .por ejemplo usando las funciones de GD estilo "thubmnail" y generar tu imagen como necesites para entregarsela a tu método .. Pero, para esto habrá que ver que es lo que require el método en concreto; no es lo mismo que te pida un "nose.gif" (con ruta) que pudiera tener un método especial que tome una variable con la imagen en "binario" (que es lo que obtendras si lo haces directamente al vuelo con las GD sin pasarlas a un archivo)

En resumen .. si bien no te he resuelto el problema .. espero que entiendas que en general no suele existir algo que lo haga "todo" .. así que a veces es necesario combianar otras técnicas y sobre todo saber bien como trabaja lo que estes usando (parámetros y tipos de lo que necesite.)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 06/04/2004, 08:46
Avatar de Christatos  
Fecha de Ingreso: julio-2003
Ubicación: Badajoz, Extremadura, España
Mensajes: 194
Antigüedad: 20 años, 9 meses
Puntos: 0
Hola, colega. Como siempre, respondiendo mis mensajes. Gracias.

¿Cómo se utiliza el addimage()? Éste es otro método, pero no sé usarlo, habla (en inglés) en el manual del modelo GD, pero no sé ni papa de qué es... ¿Puede alguien echarme una mano? Gracias a todos.

¡Un saludo a esta fabulosa comunidad!
  #4 (permalink)  
Antiguo 06/04/2004, 09:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Pero .. el "addimage()" de que classe es? R&OS o cual ? (recuerda que no todo el mundo usa esas classes habitualmente (yo mismo hace tiempo que no la uso) y que en tu mensajes decías que probastes várias ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 06/04/2004, 09:49
Avatar de Christatos  
Fecha de Ingreso: julio-2003
Ubicación: Badajoz, Extremadura, España
Mensajes: 194
Antigüedad: 20 años, 9 meses
Puntos: 0
Ah, perdona, me refería a una de R&OS... Como me hablabas tan claro de ello, pensé que es que hacía poco que las habías usado o las estabas usando y, claro, creí que hablábamos de lo mismo...
¿Sabes algo? ¿La has usado? Muchas gracias por tu ayuda.
  #6 (permalink)  
Antiguo 12/04/2004, 08:06
 
Fecha de Ingreso: abril-2004
Mensajes: 2
Antigüedad: 20 años
Puntos: 0
No existe algo mas facil?

Qué tal!
No hay alguna forma en que pueda generar un pdf de forma más fácil? como por ej: pasándole una variable que contenga todo el código html de una página ( $strHTML="Linea 1,<br>Linea 2,<br>Linea 3."; ) incluyendo también tablas?...

O para entenderlo mejor...: Teniendo un archivo html guardarlo en pdf (generando el mismo con php). Desde un php saco el contenido del html y se lo paso a un metodo que genere el pdf.
  #7 (permalink)  
Antiguo 12/04/2004, 08:48
Avatar de Christatos  
Fecha de Ingreso: julio-2003
Ubicación: Badajoz, Extremadura, España
Mensajes: 194
Antigüedad: 20 años, 9 meses
Puntos: 0
Hola, Claudiorack.
Mucha caña para meterla en una variable, ¿no? Lo más probable es que me vuelva loco... y, lo segundo que me has dicho, no lo entiendo...
Un saludo.
  #8 (permalink)  
Antiguo 12/04/2004, 08:53
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Christatos

No, he usado dicha función .. y ahora no uso R&OS (mas que nada por qué llevo tiempo sin hacer nada en versió PDF de forma dinámica). No tengo a mano las R&OS como para probarlo .. pero si me entero de algo ya lo haré saber por aquí.


claudiocrack

En principio no hay esa forma facil (o no la conozco) pero tal vez si buscas encuentres alguien que ya se dió el trabajo de hacer alguna "función" tipo lo que comentas usando como base alguna otra classe generérica de creación de PDF como las mencionadas en este mensaje .. Y si no lo encuentras hecho .. manos a la obra no todo en esta vida es "fácil" pero si tu lo desarrollas y lo deseas compartir .. otra persona que venga como tu .. podrémos recomendarle tu "función".

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 15/04/2004, 02:03
Avatar de Christatos  
Fecha de Ingreso: julio-2003
Ubicación: Badajoz, Extremadura, España
Mensajes: 194
Antigüedad: 20 años, 9 meses
Puntos: 0
Cluster y resto de compañeros:

Lo he conseguido. Como no podía usar ni ezImage ni addJpegFromFile, pues las he fusionado y he creado una que hace lo bueno de una con lo bueno de otra.
Gracias, de todas formas, a todos por vuestra ayuda.
La he llamado mrcHibridImg.

P.D.: si la necesitáis, pedídmela, que os la paso gratuítamente.

Un saludo!

Última edición por Christatos; 15/04/2004 a las 02:05
  #10 (permalink)  
Antiguo 15/04/2004, 07:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Publica dicho método nuevo o función que has creado junto con alguna breve explicación de uso en una FAQ del foro .. así le servirá a mas de uno tus investigaciones.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 28/12/2009, 12:40
 
Fecha de Ingreso: diciembre-2009
Mensajes: 2
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Generar informes desde PHP

Hola a ver ayudadme con tu Hibrido mrcHibridImg por favor, mira tengo este problema tengo una tabla en mi base de datos. uno de los campos es una imagen, asi: imagenes/adrian.jpg lo que quiero hacer es que lo imprima a pdf, de acuerdo a una previa consulta, y que me pase los campos asi: imagen - Nombre - Edad etc... pero que me imprima las imagenes. por favor a ver si se puede con el "mrcHibridImg" gracias.
  #12 (permalink)  
Antiguo 28/12/2009, 13:52
Avatar de Christatos  
Fecha de Ingreso: julio-2003
Ubicación: Badajoz, Extremadura, España
Mensajes: 194
Antigüedad: 20 años, 9 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!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:43.