Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Clase FPDF. Tabla con MultiCells

Estas en el tema de Clase FPDF. Tabla con MultiCells en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, Tengo un problemita vean les explico: Estoy elaborando un documento PDF desde php y aclaro que cuando diga TABLA, me refiero a la tabla ...
  #1 (permalink)  
Antiguo 26/12/2007, 07:28
Avatar de joseda_r  
Fecha de Ingreso: diciembre-2007
Mensajes: 10
Antigüedad: 16 años, 4 meses
Puntos: 0
Clase FPDF. Tabla con MultiCells

Hola, Tengo un problemita vean les explico:

Estoy elaborando un documento PDF desde php y aclaro que cuando diga TABLA, me refiero a la tabla donde muestro los datos de la BD en el PDF.

Tengo un arreglo $row que es extraído de la BD y los voy a mostrar en una TABLA de 5 columnas ($numero,$tecnologia,$etapa_proyecto,$descripcion, $estado_actual) y tantas filas como registros hayan.
El tamaño de cada fila se ajusta a la celda que tenga la cadena mas larga en esa fila. Es decir las alturas de las filas de la TABLA son de diferentes tamaños.
Los datos son extraidos de la base de datos a las filas en orden como estaban en las tablas de la BD. Yo deseo que esos registros se muestren en la TABLA en el orden ascendente del tamaño de las filas.

Tengo 3 maneras de explicarme en esencia lo que quiero:

1. Supongamos que los datos son extraídos en los tamaños: 45, 5,9,3
y yo quiero que los datos los imprima en este orden del tamaño: 3, 5, 9, 45

2. Supongamos que los datos son extraídos en mi tabla en estas alturas de filas: 45,60,25,97,5 (5 registros) uno debajo del otro, y la altura de cada hoja nueva PDF es 100. Esto quiere decir que los registros se veran en las siguientes hojas:

1era hoja -> registro # 1 (No pueden ir por ej. 45 y 60 porque 45+60>100)
2da hoja -> registro # 2 y 3
3era hoja -> registro # 4
4ta hoja -> registro # 5

Esto se puede optimizar para que aparezcan en 3 hojas, si ordenamos las alturas en orden ascendente (5,25,45,60,97), los registros se veran así:

1era hoja -> registro # 1, 2 y 3 (Si pueden ir 5, 25 y 45 porque 5+25+45<100 y cabe en una hoja)

2da hoja -> registro # 4
3era hoja -> registro # 5

3. Otra manera de explicarme es asi:

Mi tabla es esta:
---------------------------------------------------------


---------------------------------------------------------

---------------------------------------------------------
---------------------------------------------------------

y yo la quiero así:
---------------------------------------------------------
---------------------------------------------------------

---------------------------------------------------------


---------------------------------------------------------

La tabla que genero la tome de un script del portal FPDF que se llama: tabla con Multicells (Table with MultiCells), pero no me ordena las alturas de las filas en orden ascendente y es lo que quiero como explique ahorita.

Yo determino los tamaños de las filas contando los caracteres de la cadena mas larga dentro de esa fila.

El codigo (datos mostrados en el orden que son extraídos de la BD):

Código PHP:
$psei=0;
    for(
$c=1;$c<=5;$c++)
   while(
$row mysql_fetch_array($result))
   {
    
$psei++;
    
$numero[$psei]=$psei;
    
$tecnologia[$psei]=str_replace('.','',$row["nb_proyecto"]);
    
$etapa_proyecto[$psei]=$row["tx_status"]."\n".' ('.str_replace('.',',',$row["pc_avance_proyecto"]).' %)';
    
$descripcion[$psei]=poner_punto_final($row["tx_alcance"]).' (Participantes: '.poner_punto_final($row["nb_participantes"]).' Responsable: '.$row["nb_nombre"]." ".sin_punto_final($row["nb_apellido"]).')';
$estado_actual[$psei]=poner_punto_final($row["tx_situacion_actual"])."\n".'IMPACTO: '.poner_punto_final($row["tx_impacto"]);

//El tamaño de las filas los tengo en un arreglo $key
$key[$psei]=max(strlen($descripcion[$psei]),strlen($estado_actual[$psei]));
   }
//Muestro la tabla completa
for($i=1;$i<=$psei;$i++)
   {
$values=array($numero[$i],$tecnologia[$i],$etapa_proyecto[$i],$descripcion[$i],$estado_actual[$i])
$pdf->Row($values);
    } 
---------Aqui termina---------

He pensado en tener 2 arreglos: $key y $values (los valores son los arreglos de 5 columnas).
Quiero combinarlos de manera que los indices sean los tamaños de filas $key y los valores sean los arreglos de 5 columnas $values:
Código PHP:
$filas array_combine($key,$values); 
Y ordeno el arreglo combinado en orden ascendente
Código PHP:
ksort($filas); 
Esto se puede hacer de varias formas:
*Modificando la clase FPDF que descargue del portal
*Ordenando el arreglo que me traigo de la consulta haciendo uso del conteo de caracteres de las columnas, combinando 2 arreglos y ordenarlo por Ksort (ascendente) y utilizar este arreglo para q me genere la tabla que quiero (con las alturas de las filas en orden ascendente).

Por favor que me sugieren Uds?, si tienen código de una clase que haga esto pasenmela porque de verdad que no se que hacer.

Ahh otra cosa: Como hago para colocar en negrita una parte de una cadena que muestro en MultiCell?

Por Ej: Quiero mostrar en MultiCell (No con write ni con text) la siguiente cadena (Sistema e impacto con los siguientes estilos):

El Sistema ha producido un gran impacto

Se puede?
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:39.