Foros del Web » Programando para Internet » PHP »

Lio con PHP + HTML + HTML2FPDF

Estas en el tema de Lio con PHP + HTML + HTML2FPDF en el foro de PHP en Foros del Web. Hola a todos, Haciendo unas pruebas con la herramienta HTML2FPDF se me presentan el siguiente inconveniente: Genero un string con codigo html con el que ...
  #1 (permalink)  
Antiguo 19/09/2011, 18:04
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 19 años, 10 meses
Puntos: 8
Pregunta Lio con PHP + HTML + HTML2FPDF

Hola a todos,

Haciendo unas pruebas con la herramienta HTML2FPDF se me presentan el siguiente inconveniente:

Genero un string con codigo html con el que pretendo generar un archivo PDF. Este string contiene los datos necesarios para imprimir 2 lineas: un encabezado y unos titulos. Cuando envio a generar el PDF me abre la pagina como va a quedar impresa en PDF y veo lo siguiente:

El font definido solo lo aplica a la primera linea, la siguiente asume otro font diferente que no le he indicado. Es decir, la primera linea la pone en times de 8pt y la segunda la imprime Arial 12pt.

La segunda linea la imprime de manera mas rara que un perro a cuadros, es decir, imprime la primera columna en la pocision que deberia ser, la segunda columna la imprime como 10 lineas mas abajo, la quinta en la misma linea que la primera...., en fin, un despelote completo.

Este es el codigo PHP que utilizo

Código PHP:
    <?php  
   ob_end_clean
();
    
// Guardamos en una variable el texto que contendra el pdf  
require_once("./html2fpdf.php");
       
$html "<html>
            <body>
            <table border='0' align='center' cellspacing='4' cellpadding='0' width=100%>
                <tr>
                    <td colspan=23>LIQUIDACION DE NOMINA    DESDE 2011/07/01 HASTA 2011/07/31 
                    </td>
                </tr>
                <tr>
                    <th colspan='3' ALIGN='center'><b>Trabajador|</b>
                    </th>
                    <th ALIGN='center'><b>DIAS_TRAB|</b>
                    </th>
                    <th ALIGN='center'><b>SUELDO_DEV|</b>
                    </th>
                    <th ALIGN='center'><b>SUB._TRPTE|</b>
                    </th>
                    <th ALIGN='center'><b>TIEMPO_ADIC.|</b>
                    </th>
                    <th ALIGN='center'><b>OTR._DEV._PS|</b>
                    </th>
                    <th ALIGN='center'><b>INCAP|</b>
                    </th>
                    <th ALIGN='center'><b>TOT._DEV|</b>
                    </th>
                    <th ALIGN='center'><b>PRES.SOC|</b>
                    </th>
                    <th ALIGN='center'><b>AUX.INCAP|</b>
                    </th>
                    <th ALIGN='center'><b>P.SOC.INCAP|</b>
                    </th>
                    <th ALIGN='center'><b>SERV_DEV|</b>
                    </th>
                    <th ALIGN='center'><b>SERVICIOS_NO_DEVENGADOS|</b>
                    </th>
                    <th ALIGN='center'><b>TOTAL_FACTURA|</b>
                    </th>
                    <th ALIGN='center'><b>DESCUENTO|</b>
                    </th>
                </tr>
            </table>
        </body>
    </html>"
;
    
$pdf = new HTML2FPDF("L","mm",array(216,356)); // Generamos un objeto nuevo html2fpdf  
    
$pdf -> AddPage("L",array(216,256)); // Añadimos una página  
    
$pdf -> WriteHTML($html); // Indicamos la variable con el contenido que queremos incluir en el pdf  
    
$pdf -> Output('archivo_pdf.pdf''D'); //Generamos el archivo "archivo_pdf.pdf". Ponemos como parametro 'D' para forzar la descarga del archivo.  
    
?>
Si alguien tiene buena experiencia trabajando con esta herramienta que me pueda dar una luz para solucionar esto le agradecere sobremanera

Un Cordial Saludo

Última edición por augusto_jaramil; 19/09/2011 a las 19:11
  #2 (permalink)  
Antiguo 19/09/2011, 23:59
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Lio con PHP + HTML + HTML2FPDF

Por mera curiosidad... has probado visualizar ese codigo como HTML normal?... digo, directamente en el navegador, sin crear el PDF.

No se, me parece raro que primero envies una linea (tr) con celdas normales (td) y despues otra linea con celdas de encabezados (th) y me pregunto como es que la libreria manejara eso?

Tambien, podrias mostrar como es que cargas el resto de lineas de la tabla, porque supongo que no se limita a solo esos encabezados... o si?
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 20/09/2011, 07:50
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 19 años, 10 meses
Puntos: 8
Respuesta: Lio con PHP + HTML + HTML2FPDF

Hola Senor Triby

Le comento lo que he logrado con esto hasta el momento.

Ya logre que los titulos quedaran en una sola linea. Para ello suprimi todos los align='center'. Solo que no visualiza todos los titulos ya que para cada celda asume una longitud igual. Al visualizar este codigo HTML en el navegador muestra todos los titulos bien, es decir, una linea con "LIQUIDACIONDE NOMINA...." y otra linea con TODOS los demas titulos

Ahora, el tema del $pdf->SetFontSize(8) que lo asume solo para la primera celda y para las demas las asume como si fueran letra de 12pt.

Con respecto al cargue de las demas lineas, que seria el detalle, se haria desde unos datos que estan almacenados en un array. Igual, celda separa por <td> y al final de cada linea con un <tr>

El codigo lo tengo asi en estemomento:

Código PHP:
    <?php  
    
// Guardamos en una variable el texto que contendra el pdf  
require_once("./html2fpdf.php");
       
$html "<html>
            <body>
            <table border='0' align='center' cellspacing='4' cellpadding='0' width=100%>
                <tr>
                    <td colspan=23>LIQUIDACION DE NOMINA    DESDE 2011/07/01 HASTA 2011/07/31 
                    </td>
                </tr>
                <tr>
                    <td width=200>Trabajador
                    </td>
                    <td width=150>DIAS_TRAB
                    </td>
                    <td width=150>TIEMPO_ADIC.
                    </td>
                    <td width=150>OTR._DEV._PS
                    </td>
                    <td width=150>INCAP
                    </td>
                    <td width=150>TOT._DEV
                    </td>
                    <td width=150>PRES.SOC
                    </td>
                    <td width=150>AUX.INCAP
                    </td>
                    <td width=150>P.SOC.INCAP
                    </td>
                    <td width=150>SERV_DEV
                    </td>
                    <td width=250>SERVICIOS_NO_DEVENGADOS
                    </td>
                    <td width=150>TOTAL_FACTURA
                    </td>
                    <td width=150>DESCUENTO
                    </td>
                </tr>
            </table>
        </body>
    </html>"
;
    
$pdf = new HTML2FPDF("L","mm",array(216,356)); // Generamos un objeto nuevo html2fpdf  
    
$pdf -> AddPage("L",array(216,256)); // Añadimos una página  
    
$pdf->SetFontSize(8);
    
$pdf -> WriteHTML($html); // Indicamos la variable con el contenido que queremos incluir en el pdf  
    
$pdf -> Output('archivo_pdf.pdf''D'); //Generamos el archivo "archivo_pdf.pdf". Ponemos como parametro 'D' para forzar la descarga del archivo.  
    
?>
  #4 (permalink)  
Antiguo 20/09/2011, 12:19
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 19 años, 10 meses
Puntos: 8
Respuesta: Lio con PHP + HTML + HTML2FPDF

Bueno, este es el codigo con el que pretendo generar el archivo PDF.... el codigo que he estado mencionando anteriormente es uno de pruebas para verificar el funcionamiento

Código PHP:
function genera_excel(){
  global 
$titulosoftware$nom_emp$nit_emp$a_f$m_rep$fecha_i$fecha_f$m_det$rec_tmp$cod_rep$tota$shtml;

  
$shtml "<html><body>";
  
$shtml "<table border='0' align=center cellspacing='4' cellpadding='0' width=100%>";
  
$shtml .= "<tr><td colspan=29 align=center>$nom_emp Id.:$nit_emp</td></tr>";
  
$shtml .= "<tr>";
  
$fecha_i $a_f[1];
  
$fecha_f $a_f[2];
  
$cen trim($rec_tmp[0]['c_costo']);
  
$c_cto trim($rec_tmp[0]['c_costo']);
  
$empre "[$cen] ".trim($rec_tmp[0]['n_centro']);
  
$shtml .= "<td colspan=6>Cliente: $empre</td></tr>";
  
$shtml .= "<tr>";
  
$titulo "LIQUIDACION DE NOMINA    DESDE $fecha_i HASTA $fecha_f";
  
$shtml .= "<td colspan=23>$titulo</td></tr>";
  
$shtml .= "<tr>";
  
$shtml .= "<td with=200>Trabajador</td>";
  
$cols 2;
  for (
$j=0$j<count($m_det); $j++) {
       if (
strpos($m_det[$j]['formato'],"-") === false) {
          
$ttt trim($m_det[$j]["titulo1"]);
          
$ttt ereg_replace(" ","_",$ttt);
          
$shtml .= "<td with=150>$ttt</td>";
       }
  }
  
$shtml .= "</tr>";
  
$nita = -1;
  
$cena "";
  
$pagina 0;
  
$k count($rec_tmp);
  
$nivel_det 6;
  
$c_costo_anterior $c_cto;
  
$vincula_anterior trim($rec_tmp[0]["c25"]);
  
$n_vincula_anterior trim($rec_tmp[0]["descripcion"]);
  
$n_desc_centro trim($rec_tmp[0]["n_centro"]);
  
$regis 0;
  
$total_vincul = Array();
  
$total_centro = Array();
  foreach (
$tota as $key => $xx) {
      
$total_vincul[$key] = 0;
  }
  foreach (
$tota as $key => $xx) {
      
$total_centro[$key] = 0;
  }
  for (
$p=$pagina$p<$k$p++) {
      if (
$vincula_anterior != trim($rec_tmp[$p]["c25"])) {
         
$shtml .= "<tr>";
         
$var "TOTAL $n_vincula_anterior";
         
$shtml .= "<td colspan=3>"$var."</td>";
         for (
$j=0$j<count($m_det); $j++) {
             if (
strpos($m_det[$j]['formato'],"-") !== false)
                continue;

             
$va1 $total_vincul[$j+1];
             
$total_centro[$j+1] += $total_vincul[$j+1];
             
$varnumber_format($va12'.'',');
             
$shtml .= "<td align=right>$var</td>";
         }
         
$vincula_anterior trim($rec_tmp[$p]["c25"]);
         
$n_vincula_anterior trim($rec_tmp[$p]["descripcion"]);
         
$regis 0;
         
$total_vincul = Array();
         foreach (
$tota as $key => $xx) {
             
$total_vincul[$key] = 0;
         }
      }
      if (
$c_costo_anterior != trim($rec_tmp[$p]["c_costo"])) {
         
$shtml .= "<tr bgcolor=lightcyan>";
         
$var "TOTAL $n_desc_centro";
         
$shtml .= "<td colspan=3>"$var."</td>";
         for (
$j=0$j<count($m_det); $j++) {
             if (
strpos($m_det[$j]['formato'],"-") !== false)
                continue;
            
$va1 $total_centro[$j+1];
            
$varnumber_format($va12'.'',');
            
$shtml .= "<td align=right>$var</td>";
         }
         
$c_costo_anterior trim($rec_tmp[$p]["c_costo"]);
         
$n_desc_centro trim($rec_tmp[$p]["n_centro"]);
         
$regis 0;
         
$total_centro = Array();
         foreach (
$tota as $key => $xx) {
             
$total_centro[$key] = 0;
         }
         
$cen trim($rec_tmp[$p]['c_costo']);
         
$empre "[$cen] ".trim($rec_tmp[$p]['n_centro']);
         
$shtml .= "<tr bgColor=#CBD9E5>";
         
$shtml .= "<td colspan=23 ALIGN=left><b>Cliente: $empre</td>";
      }
      
$regis++;
      
$datos $rec_tmp[$p];
      
$niv $datos['nivel_det'];
      
$llave trim($datos['llave']);
      if (
$niv>$nivel_det) {
         
$k++;
         if (
$k count($rec_tmp))
            
$k count($rec_tmp);
         continue;
      }
      
$shtml .= "<tr>";
      if (
strlen(trim($datos['llave'])) > 0)
         
$cuenta round(trim($datos['llave']));
      else
         
$cuenta "";
      
$shtml .= "<td align='right'>$cuenta</td>";
      
$shtml .= "<td align='left' colspan=2 width=36>"$datos['n_llave']."</td>";
      for (
$j=0$j<count($m_det); $j++) {
          if (
strpos($m_det[$j]['formato'],"-") !== false)
             continue;
          
$col $m_det[$j]['col_rep'];
          
$tipo_campo $m_det[$j]['tipo_campo'];
          
$campo "c$col";
          
$va1 trim($datos[$campo]);
          
$sor trim($m_det[$j]['formato']);
          if (!
is_numeric($sor)|| strlen(trim($m_det[$j]))==0)
              
$sor 2;
          if (
is_numeric($va1)) {
             
$total_vincul[$col] += $va1;
             
$varnumber_format($va1$sor'.'',');
          }
          else
                
$var $va1;
          if (
is_numeric($va1))
             
$shtml .= "<td align=right>$var</td>";
          else
                
$shtml .= "<td align=left>$var</td>";
      }
$p 50000000;
  }
  
$shtml .= "<tr bgcolor=lightcyan>";
  
$var "TOTAL $n_vincula_anterior";
  
$shtml .= "<td colspan=3>"$var."</td>";
  for (
$j=0$j<count($m_det); $j++) {
      if (
strpos($m_det[$j]['formato'],"-") !== false)
         continue;
      
$va1 $total_vincul[$j+1];
      
$total_centro[$j+1] += $total_vincul[$j+1];
      
$varnumber_format($va12'.'',');
      
$shtml .= "<td align=right>$var</td>";
  }
  
$shtml .= "<tr bgcolor=lightcyan>";
  
$var "TOTAL $n_desc_centro";
  
$shtml .= "<td colspan=3>"$var."</td>";
  for (
$j=0$j<count($m_det); $j++) {
      if (
strpos($m_det[$j]['formato'],"-") !== false)
         continue;
      
$va1 $total_centro[$j+1];
      
$varnumber_format($va12'.'',');
      
$shtml .= "<td align=right>$var</td>";
  }
  
$shtml .= "<tr bgcolor=lightcyan>";
  
$var "GRAN TOTAL Regs:".count($rec_tmp);
  
$shtml .= "<td colspan=3>"$var."</td>";
  for (
$j=0$j<count($m_det); $j++) {
      if (
strpos($m_det[$j]['formato'],"-") !== false)
         continue;
      
$va1 $tota[$j+1];
      
$varnumber_format($va12'.'',');
      
$shtml .= "<td align=right>$var</td>";
  }
  
$shtml .= "</tr>";
  
$shtml .= "</td></tr>";
  
$shtml .= "</td>";
  
$shtml .= "</tr>";
  
$shtml .= "</table>";
  
$shtml .= "</body></html>";
  
$pd genera_pdf1($shtml);
}

function 
genera_pdf1($shtml) {
  require_once(
"./html2fpdf.php");
  
ob_end_clean();
  
$pdf=new HTML2FPDF("L","mm",array(416,556));
  
$pdf->AddPage("L",array(416,556));
  
$pdf->SetFontSize(8);
  
$pdf->WriteHTML($shtml);
  
$pdf->Output('archivo_pdf.pdf','D');

Como digo, este es el codigo de mi script que estoy desarrollando, el anterior es solo de prueba.

Conm este codigo al hacer un echo $shtml muestra la tabla en el navegador perfecto, no siendo asi al generar el archivo en PDF

Mil Gracias de antemano por sus aportes

Un Cordial Saludo
  #5 (permalink)  
Antiguo 20/09/2011, 13:09
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Lio con PHP + HTML + HTML2FPDF

html2pdf tiene problemas con tablas complejas, te recomendaría usar dompdf, ya que éste me ha permitido trabajar con tablas que contienen rowspan y colspan completamente irregulares. La única condición: usa html correcto (etiquetas bien abiertas y cerradas) así como también si usas archivos css, deben estar bien declarados (sin hacks)
  #6 (permalink)  
Antiguo 20/09/2011, 13:52
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 19 años, 10 meses
Puntos: 8
Respuesta: Lio con PHP + HTML + HTML2FPDF

Gracias ocp001a por su recomendacion....

Hasta donde he cacharriado con este cuento me he dado cuenta que el HTML2PDF es bastante limitado en cuanto a las tablas que llamas complejas, como en este caso.

Me he dado cuenta que todos los tags de html deben ir en mayusculas (<HTML>,<BODY>, <TABLE>, <TR>, etc,etc) y los <TD> deben llevar con sigo WIDTH.... Que camello tan hijuemadre mano....

Voy a mirar entonces el DOMPDF que me recomiendas a ver como me va. Ya que el jefe esta que me echa... jejejejeje

Estare reportando resultados....

Mil Gracias a todos

  #7 (permalink)  
Antiguo 20/09/2011, 17:44
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 19 años, 10 meses
Puntos: 8
Respuesta: Lio con PHP + HTML + HTML2FPDF

Finalmente, y FELIZMENTE.... (toy que me embriago de la dicha ), ya el patron creo que no me echa......

La solucion era esa... DOMPDF

Mil gracias a todos por los aportes....


Etiquetas: html
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 01:02.