Foros del Web » Programando para Internet » PHP »

Ajuste del alto de celdas con TCPDF

Estas en el tema de Ajuste del alto de celdas con TCPDF en el foro de PHP en Foros del Web. Saludos amigos, estoy utilizando la clase TCPDF para generar reportes en PDF, antes utilizaba Ezpdf pero esta ultima era muy compleja para manejar los encabezados ...
  #1 (permalink)  
Antiguo 03/10/2012, 07:24
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 13 años, 9 meses
Puntos: 21
Ajuste del alto de celdas con TCPDF

Saludos amigos, estoy utilizando la clase TCPDF para generar reportes en PDF, antes utilizaba Ezpdf pero esta ultima era muy compleja para manejar los encabezados y pie de páginas...

En fin, utilizando el ejemplo 11 de esta clase (http://www.tcpdf.org/examples/example_011.phps y http://www.jordigirones.com/78-crear-pdf-php-tcpdf.html) pero en vez de utilizar un archivo, estoy obteniendo un arreglo desde una base de datos en PostgreSQL, de esta tabla obtengo 4 campos: id, nombre, descripción y estatus.

Ahora el problema, el campo descripción es un campo del tipo texto con tamaño indefinido, así que cuando genero el reporte y el campo es mayor al ancho de la celda, esta se superpone sobre el texto de los otros datos, actualmente lo estoy haciendo de esta manera:

Código PHP:
Ver original
  1. $header = array('id', 'nombre', 'descripción ', 'estatus');
  2.  
  3.         $pdf->SetFillColor(255, 0, 0);
  4.         $pdf->SetTextColor(255);
  5.         $pdf->SetDrawColor(128, 0, 0);
  6.         $pdf->SetLineWidth(0.3);
  7.         $pdf->SetFont('', 'B');
  8.         // Cabecera de Tabla
  9.         $w = array(30, 30, 90, 30);
  10.         $num_headers = count($header);
  11.         for($i = 0; $i < $num_headers; ++$i) {
  12.             $pdf->Cell($w[$i], 7, $header[$i], 1, 0, 'C', 1);
  13.         }
  14.         $pdf->Ln();
  15.         // Color y restauracion de la fuente de texto
  16.         $pdf->SetFillColor(224, 235, 255);
  17.         $pdf->SetTextColor(0);
  18.         $pdf->SetFont('');
  19.         //Parametros de la funcion Cell()
  20.         $fill = 1;
  21.         $border='LR';
  22.         $ln=0;
  23.         $fill = true;
  24.         $align='T';
  25.         $link=0;
  26.         $stretch=0;
  27.         $ignore_min_height=false;
  28.         $calign='T';
  29.         $valign='T';
  30.                // Datos
  31.         while($data = $informes->asociar($con)) {// pg_fetch_assoc($consulta_sql)
  32.            
  33.             $pdf->Cell(30, 6, $data["id"], $border, $ln, $align, $fill,$link,$stretch,$ignore_min_height,$calign,$valign);
  34.             $pdf->Cell(30, 6, $data["nombre"], $border, $ln, $align, $fill,$link,$stretch,$ignore_min_height,$calign,$valign);
  35.             $pdf->Cell(90, 6, $data["descripcion"], $border, $ln, $align, $fill,$link,$stretch,$ignore_min_height,$calign,$valign);
  36.             $pdf->Cell(30, 6, $data["estatus"], $border,$ln,$align,$fill,$link,$stretch,$ignore_min_height,$calign,$valign);
  37.             $pdf->Ln();
  38.             $fill=!$fill;
  39.         }
  40.         $pdf->Cell(array_sum($w), 0, '', 'T');//Linea al final del reporte (opcional)

Lo que quiero que se ajuste el alto de la celda si la longitud de la cadena de texto es mayor que el ancho de la celda.

Tambien he revisado la documentacion de esta función y no me ha servido de mucho: http://www.tcpdf.org/doc/classTCPDF....edfe29f8166f31
  #2 (permalink)  
Antiguo 04/10/2012, 12:31
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 13 años, 9 meses
Puntos: 21
Respuesta: Ajuste del alto de celdas con TCPDF

Traté de hacer lo siguiente:

Código PHP:
Ver original
  1. $ancho=90;//establezco el ancho de la celda
  2.     $altura=6;//establezco la altura
  3.     $cantidad_lineas= strlen($data["descripcion"]);//establezco el tamaño de la cadena de caracteres
  4.     if($cantidad_lineas > $ancho)//comparo si el tamaño de la cadena es mayor que el ancho de la celda
  5.     {
  6.         $cant_espacios = $cantidad_lineas/$ancho;//establezco la cantidad de espacios
  7.         $cant_espacios=abs($cant_espacios);//
  8.         $altura=$altura*round($cant_espacios);
  9.     }
  10.     $pdf->Cell(30, 6, $data["id"], $border, $ln, $align, $fill,$link,$stretch,$ignore_min_height,$calign,$valign);
  11.     $pdf->Cell(30, 6, $data["nombre"], $border, $ln, $align, $fill,$link,$stretch,$ignore_min_height,$calign,$valign);
  12.     $pdf->Cell($ancho, $altura, $data["descripcion"], $border, $ln, $align, $fill,$link,$stretch,$ignore_min_height,$calign,$valign);//Cambiar el alto de la celda
  13.     $pdf->Cell(30, 6, $data["estatus"], $border,$ln,$align,$fill,$link,$stretch,$ignore_min_height,$calign,$valign);
  14.     $pdf->Ln();
  15.     $fill=!$fill;
  16.     }
  17.     $pdf->Cell(array_sum($w), 0, '', 'T');//Linea al final del reporte (opcional)

Pero la cadena sigue superponiendose a los otros datos en el reporte... Creía que ajustando la altura de la celda también se ajustaban los caracteres dentro de la cadena...
  #3 (permalink)  
Antiguo 04/10/2012, 13:16
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 13 años, 9 meses
Puntos: 21
Respuesta: Ajuste del alto de celdas con TCPDF

Bueno amigos, ya pude solucionar lo planteado...

Tuve que combinar las funciones Cell() y MultiCell() de la clase TCPDF...

la clase quedó algo así...

Código PHP:
Ver original
  1. public function ColoredTable($header,$data,$informes)
  2. {
  3.     $pdf->SetFillColor(255, 0, 0);
  4.     $pdf->SetTextColor(255);
  5.     $pdf->SetDrawColor(128, 0, 0);
  6.     $pdf->SetLineWidth(0.3);
  7.     $pdf->SetFont('', 'B');
  8.     // Header
  9.     $w = array(30, 25, 95, 30);
  10.     $num_headers = count($header);
  11.     for($i = 0; $i < $num_headers; ++$i) {
  12.         $pdf->Cell($w[$i], 7, $header[$i], 1, 0, 'C', 1);
  13.     }
  14.     $pdf->Ln();
  15.     // Color and font restoration
  16.     $pdf->SetFillColor(224, 235, 255);
  17.     $pdf->SetTextColor(0);
  18.     $pdf->SetFont('');
  19.     // Data
  20.     //Parametros para las funciones Cell () y MultiCell()
  21.     $fill = 1;
  22.     $border='LTR';
  23.     $ln=0;
  24.     $fill = 0;
  25.     $align='T';
  26.     $link=0;
  27.     $stretch=0;
  28.     $ignore_min_height=0;
  29.     $calign='T';
  30.     $valign='T';
  31.     $height=6;//alto de cada columna
  32.     while($data = $informes->asociar($con)) {
  33.         $ancho=95;
  34.         $altura=9.5;
  35.         $cantidad_lineas= strlen($data["descripcion"]);
  36.         if($cantidad_lineas > $ancho)
  37.         {
  38.             $cant_espacios = $cantidad_lineas/$ancho;
  39.             $rendondear=round($cant_espacios,2);
  40.             $altura=$altura*$rendondear;
  41.         }//Fin del iff
  42.            
  43.         $pdf->Cell(30, $altura, $data["componente_pendencia"], $border,$ln,$align,$fill,$link,$stretch,$ignore_min_height,$calign,$valign);
  44.         $pdf->Cell(25, $altura, $data["fecha_inicio_pendencia"],$border,$ln,$align,$fill,$link,$stretch,$ignore_min_height,$calign,$valign);
  45.         $pdf->MultiCell($ancho, $altura, $data["descripcion"],$border,$align,$fill,$ln);
  46.         $pdf->Cell(30, $altura, $data["estatus"],$border,$ln,$align,$fill,$link,$stretch,$ignore_min_height,$calign,$valign);
  47.         $pdf->Ln();
  48.         $fill=!$fill;
  49.     }//Fin del while
  50.     $pdf->Cell(array_sum($w), 0, '', 'T');
  51. }//Fin de la clase

Espero que le sea de utilidad a alguien en el futuro... Y se encuentre con uan situación parecida.

Etiquetas: pdf, postgres, tcpdf
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 04:14.