Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/02/2012, 09:08
dgrvedado
 
Fecha de Ingreso: diciembre-2010
Ubicación: Asunción
Mensajes: 41
Antigüedad: 13 años, 11 meses
Puntos: 1
DOMPDF: Paginación y PHP

Hola a todos!!!

Soy medio nuevo en el foro, aunque ya llevo bastante tiempo programando con PHP. Hace poco tiempo heredé una aplicación a desarrollar (más bien sería a modificar) que fue hecha por alguien a quien no conocí. No dejo un comentario en el código que sirviera para poder analizar lo que hizo y he tenido que realizar una lectura del código para poder entender lo que se hizo, lo que ha redundado en una deficiencia de mi desempeño laboral. Pero bueno ya he ido superando eso y ya yo mismo tengo un mejor control de la app; esta aplicación tiene un área que genera informes de personas y esos informes pueden ser guardados en PDF, para ello la persona que lo hizo utilizó el DOMPDF que se ve muy bien. Llego el momento que de tantos cambios al informe en formato PHP se fue obviando el PDF y esto resulto en que con el tiempo ya no se pudiera guardar el PDF del mismo informe que se visualizaba. Me di a la tarea de corregir dicho problema y apear de que no es difícil me encontré un problema en dos sentidos:
1- La paginación del PDF es horriible
2- Producto a la páginación me corta y desvirtua las tablas

Una imagen de ejemplo:

(Por motivos de confidencialidad borre los nombres propios)

En este mismo PDF generado no solo sucede lo del crash de la tabla, sino que hace un salto de página. Otra imagen de ejemplo:


Aquí les paso la parte del código que uso en mi PHP para generar el html que hace la paginación:

$count = 0;
$va = array("D", "I");
while ($count <= 1) {
if ($va[$count] == "D") { $t = "Demandas"; }
else if ($va[$count] == "I") { $t = "Inhibiciones"; }

$q6 = "SELECT A.* FROM tbl A WHERE A.field1 = '' AND A.field2 = 'SI'
AND A.field3 = '$_GET[id]' AND A.field4 = '".$va[$count]."' ORDER BY A.fieldn ";
$r6 = mysql_query($q6) or die ("No se puede consultar tbl");
$row6 = mysql_num_rows($r6);
if ($row6) {
$i = 0;
while ($rs6 = mysql_fetch_array($r6)) {
$pagi = $pagi + 4;
if($pagi > $tot_pagi) { $html .= '<div style="page-break-after: always;" /></div>'; $pagi = 0;}


if ($tip <> $rs6['fieldx']) {

$html .= '<div style="'.$style.'">
<p><span class="big">'.$t.'</span></p>
<table width="600" border="1" cellpadding="2" cellspacing="0"';
}
$html .= '<tr>
<td valign="bottom">
<table width="100%" border="0">
<tr><td height="15" align="right"><span style="text-align: right; font-weight: bold;">Juzgado:</span></td></tr>
<tr><td height="15" align="right"><span style="text-align: right; font-weight: bold;">Demandante:</span></td></tr>
<tr><td height="15" align="right"><span style="text-align: right; font-weight: bold;">Fecha:</span></td></tr>
<tr><td height="15" align="right"><span style="font-weight: bold;">Monto:</span></td></tr>
</table>
</td>';

$query_j = "SELECT * FROM tbl1 WHERE (field1 = '' OR field1 = 'NO') AND field2 = '$rs6[fieldx]' ";
if ($recordset_j = mysql_query($query_j)) {
$rs_j = mysql_fetch_array($recordset_j); }

$html .= '<td valign="bottom">
<table width="100%" border="0">
<tr><td height="15"><small>'.$rs_j[juzgado].'</small></td></tr>
<tr><td height="15"><small>'.strtoupper($rs6[field1]).'</small></td></tr>
<tr><td height="15"><small>'.ordenar_fecha($rs6[field2]).'</small></td></tr>
<tr><td height="15"><small>'.number_format($rs6[field3], 0, ",", ".").'<small>';
if ( ($rs_j[tipo] == 1 && $rs6[field3] < 15000000 && $t == "Demandas") || ($rs6['field4'] == "D") )
{ $html .= ' Dolares'; } else { $html .= ' Guaranies'; }
$html .= '</small></small></td></tr></table></td>
<td valign="bottom">
<table width="100%" border="0">
<tr><td height="15" align="right"><span style="font-weight: bold;">Exp. No:</span></div></td></tr>
<tr><td height="15" align="right"><span style="font-weight: bold;">Secretaria:</span></div></td></tr>
<tr><td height="15" align="right"><span style="font-weight: bold;">Turno:</span></div></td></tr>
<tr><td height="15" align="right"><span style="font-weight: bold;">E. Procesal:</span></div></td></tr>
</table></td>
<td valign="bottom">
<table width="100%" border="0">
<tr><td height="15" valign="top"><small>'.$rs6[field5].'</small></td></tr>
<tr><td height="15" valign="top"><small>'.$rs6[field6].'</small></td></tr>
<tr><td height="15" valign="top"><small>'.$rs6[field7].'</small></td></tr>
<tr><td height="15" valign="top"><small>';
if ($rs6['field8'] == "A") { $html .= 'ACTIVO'; }
else if ($rs6['field8'] == "F") { $html .= 'FINIQUITADO ' . ordenar_fecha($rs6[field9]); }
$html .= '</small></td></tr></table></td></tr>';
++$i;
if (($tip <> $rs6['field1'] and $i > 1) || ($row6 == $i)) {
$html .= '</table>';
}
$tip = $rs6['field1'];
} mysql_free_result($r6); //Finaliza el While
} else {
$pagi = $pagi + 3;
if($pagi > $tot_pagi) { $html .= '<div style="page-break-after: always;" /></div>'; $pagi = 0;}


$html .= '<p><span class="big">'.$t.'</span></p>
<table width="600" border="1" cellpadding="2" cellspacing="0">
<tr><td width="600">No tiene registrado '.$t.'. </td></tr></table>';

}
++$count;
} // end while $count <= 1) para D e I
$html .= '</table></div>';
$pagi = $pagi + 2;
if($pagi > $tot_pagi) { $html .= '<div style="page-break-after: always;" /></div>'; $pagi = 0;}


Precisamente este es el código donde el PDF desvirtua la Tabla y hace el salto de página al terminar el While.

Alguna ayuda o sugerencia al respecto??

Saludos,
David