Ayuda Con Doble Ciclo En Dompdf

735 views
Skip to first unread message

alexandrox92

unread,
Apr 27, 2012, 9:54:44 PM4/27/12
to dom...@googlegroups.com
Hola como estan !  necesito ayuda.

Verán trabajo hace poco con el dompdf (por cierto esta super) y hasta ahora todo iba bien hasta que llegue a lo siguiente:

Estoy generando una boleta de notas de un colegio y en la construccion del archivo utilice un DO WHILE lo que me funciono a la perfección pero ahora necesito necesito generar   un PDF con todos los boletines de un grupo.

entonces lo que hago es generar otro DO WHILE para haci repetir  los boletines.

Al abrir el archivo PHP funciona a la perfección se generan todos los boletines al vuelo pero si lo paso por el dompdf la pagina demora bastante hasta que me da error 500 .

antes que me digan que si cierro todas as etiquetas bn "si el documento se genera de forma perfecta solo que el dompdf no genera el pdf" pero ATENCION !! si borro el DO WHILE que contiene el ciclo de repetición para los boletines SI FUNCIONA entonces mi pregunta es...

el dompdf no puede trabajar con DO WHILE anidados?
alguien sabe de algun alternativo al do while ?
se podria utilizar un FOR para mostrar los ROW de una consulta ¿como??

Espero me ayuden y por si acaso les dejo el archivo PHP para que lo vean ustedes mismos.

[CODIGO PHP]

<?php 
/* llamando al archivo que contiene la informacion necesaria para realizar una conexion a la base de datos */
require_once('Connections/pxndx920720.php'); ?>
<?php
/* realizando la consulta para buscar la informacion del colegio */
mysql_select_db($database_pxndx920720, $pxndx920720);
$query_infocolegio = "SELECT * FROM alinfo WHERE acceso = 1";
$infocolegio = mysql_query($query_infocolegio, $pxndx920720) or die(mysql_error());
$row_infocolegio = mysql_fetch_assoc($infocolegio);
$totalRows_infocolegio = mysql_num_rows($infocolegio);
/* realizando la consulta para buscar el logo del colegio */
mysql_select_db($database_pxndx920720, $pxndx920720);
$query_logocolegio = "SELECT logocole FROM aladmin";
$logocolegio = mysql_query($query_logocolegio, $pxndx920720) or die(mysql_error());
$row_logocolegio = mysql_fetch_assoc($logocolegio);
$totalRows_logocolegio = mysql_num_rows($logocolegio);
/* realizando la consulta para buscar  todos los usuarios que esten matriculados en el grado del cual se efctua la consulta */
mysql_select_db($database_pxndx920720, $pxndx920720);
$query_bucle = "SELECT * FROM alusuarios WHERE idgrado = 1";
$bucle = mysql_query($query_bucle, $pxndx920720) or die(mysql_error());
$row_bucle = mysql_fetch_assoc($bucle);
$totalRows_bucle = mysql_num_rows($bucle);
?>
<!--se inica el documento con las cabeceras-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<!--se definen las cases CSS que se usarran ademas de otros CSS utlizados en la generacion del pdf-->
<style type="text/css">
body 
{
margin:39px;
}
#apDiv1 {
width:490px;
height:auto;
}
.nombrecol
{
text-transform:uppercase;
font-size:19px;
text-align:center;
}
.nombre
{
text-transform:uppercase;
font-size:18px;
}
.resolcion 
{
text-transform:uppercase; 
font-size:9px;

}
.eslogan 
{
text-transform:capitalize; 
font-size:10px;

}
.legal
{
font-size:9px;
}
.completo
{
border:1px solid black;
}
.arriba
{
border-top:1px solid black;
}
.enene
{
border-left:1px solid black;
border-right:1px solid black;
border-top:1px solid black;
}
.sinde
{
border:1px solid black;
border-left:none;
}
.sindelo
{
border:1px solid black;
border-left:none;
font-size:9px;
}
.esquina
{
border-right:1px solid black;
border-top:1px solid black;
}
</style>
</head>
<body>
<!--comienza el cuerpo del pdf-->
<?php 
//que periodo estan averiguando
$periodo=4;
//año que se consulta
$ano=2012;
/* se realiza un ciclo con la consulta de estudiantes en el grado */
do  {
//de quien es este boletin
$idestudiante=$row_bucle['id'];
?>
<?php 
/* seraliza la consulta del identiicador del estudiante */
mysql_select_db($database_pxndx920720, $pxndx920720);
$query_estudiante = "SELECT * FROM alusuarios WHERE id = '$idestudiante'";
$estudiante = mysql_query($query_estudiante, $pxndx920720) or die(mysql_error());
$row_estudiante = mysql_fetch_assoc($estudiante);
$totalRows_estudiante = mysql_num_rows($estudiante);
/*se halla el identificardor del grado del estdiante */
$idgrado=$row_estudiante['idgrado'];
/* se realiza la consulta sobre el grado como nombre dependencia jornada ..etc.. */
mysql_select_db($database_pxndx920720, $pxndx920720);
$query_grado = "SELECT * FROM algrado WHERE idgrado = '$idgrado'";
$grado = mysql_query($query_grado, $pxndx920720) or die(mysql_error());
$row_grado = mysql_fetch_assoc($grado);
$totalRows_grado = mysql_num_rows($grado);
/* se realiza la consulta de las areas que se dictan al grado*/
mysql_select_db($database_pxndx920720, $pxndx920720);
$query_asignaturas = "SELECT * FROM alareas WHERE idgrado = 1 ORDER BY nombre ASC";
$asignaturas = mysql_query($query_asignaturas, $pxndx920720) or die(mysql_error());
$row_asignaturas = mysql_fetch_assoc($asignaturas);
$totalRows_asignaturas = mysql_num_rows($asignaturas);
?>
<!--se crea la tabla de cabecera para almacenar informacion de las consultas como el logo el nombre de la institucion entre otros-->
<table width="100%" height="104" border="0">
  <tr>
    <th scope="col" align="center" class="nombrecol"><?php
$origen="instituto educativo ".$row_infocolegio['colegio']; 
/* se pasa la cadena del nombre del colegio a mayusculas */
$resultado = strtoupper($origen);
echo $resultado;
?></th>
    <th rowspan="3" scope="col"><img src="logocole.jpg" /></th>
  </tr>
  <tr>
    <td align="center"><div class="resolcion">resolucion numero <?php echo $row_infocolegio['codservicio']; ?> de la secretaria de educacion.</div> </td>
  </tr>
  <tr>
    <td align="center"><?php echo $row_infocolegio['eslogacol']; ?></td>
  </tr>
</table>
<!--se acaba la tabla de cabecera y se inicia la que almacenara el resumen de informacion del estudiante-->
<table width="100%" border="0">
  <tr>
    <th colspan="6" align="center" class="nombre" scope="col"><?php  
/*se imprime el nombre del estudiante */ $origen=$row_estudiante['apellidoa']. " ". $row_estudiante['apellidob']." ".$row_estudiante['nombre']; 
/* se pasa la cadena del nombre a mayusculas */
$resultado = strtoupper($origen);
echo "$resultado";
?></th>
  </tr>
  <tr>
    <th  align="left">CODIGO</th>
    <td ><?php echo $row_estudiante['id']; ?></td>
    <th align="left">PERIODO</th>
    <td ><?php 
/* se realiza una consulta para identificar el periodo y convertirlo en letras */
if ($periodo==1)
{ echo "PRIMERO"; }
if ($periodo==2)
{ echo "SEGUNDO"; }
if ($periodo==3)
{ echo "TERCERO"; }
if ($periodo==4)
{ echo "FINAL"; }
?></td>
    <th align="left">JORNADA</th>
    <td ><?php $jornada=$row_grado['jornada']; 
/* se averigua la jornada y se corrige ortografia */
if ($jornada=="MANANA")
{echo 'MA&Ntilde;ANA';};
if ($jornada=="TARDE")
{echo 'TARDE';};
if ($jornada=="NOCHE")
{echo 'NOCTURNA';};
if ($jornada=="SABATINA")
{echo 'SABATINA';};
?></td>
  </tr>
  <tr>
    <th align="left">GRADO</th>
    <td><?php echo $row_grado['grado'] . " ". $row_grado['dependencia']; ?></td>
    <th align="left">MODALIDAD</th>
    <td><?php 
/* se realiza la consulta del grado y se ubica en un rango academico*/
$filtrando=$row_grado['grado'];
if ($filtrando >= 1 and $filtrando <=5)
{ echo 'PRIMARIA';}
if ($filtrando >= 6 and $filtrando <=9)
{ echo 'SECUNNDARIA';}
if ($filtrando >= 10 and $filtrando <=11)
{ echo 'BACHILLERATO';}
if ($filtrando == 'KINDER')
{ echo 'KINDER';}
if ($filtrando == 'TRANSICION')
{ echo 'TRANSICION';}
?></td>
    <th align="left">A&Ntilde;O</th>
    <td><?php echo "$ano"; ?></td>
  </tr>
</table>
<!--se acaba la tabla de resumen de informacion del estudiante y se inicia una que almacenara logros intensidad horaria, notas y asignaturas-->  
<table width="100%" style="border-collapse:collapse" >
  <tr>
    <th width="25%" rowspan="2" align="left" class="enene" >ASIGNATURA</th>
    <th width="4%" rowspan="2" align="center" class="esquina" >IH</th>
    <th width="6%" rowspan="2" align="center" class="esquina" >FLL</th>
    <th width="46%" rowspan="2" align="left" class="esquina" >LOGROS</th>
    <th colspan="5" align="center" class="esquina" >NOTAS</th>
  </tr>
  <tr>
    <td width="3%" align="center" class="esquina" >P1</td>
    <td width="4%" align="center" class="esquina" >P2</td>
    <td width="3%" align="center" class="esquina" >P3</td>
    <td width="3%" align="center" class="esquina" >P4</td>
    <td width="6%" align="center" class="esquina" >DEF</td>
  </tr><!--se acaban las cabeceras de la tabla de notas y se inicia un ciclo para la consulta de las areas dictadas al grado del estudiante actual-->
    <?php 
/* se inicia el ciclo de materias */do { ?>
  <tr width="25%">
    <?php $idarea=$row_asignaturas['idarea']; ?>
      <td class="completo" align="left"><?php
 /* se consulta el nombre de la asignatura y se pasa a mayusculas para imprimirlo */  
 $origen=$row_asignaturas['nombre']; 
$resultado = strtoupper($origen);
echo $resultado;  
 ?></td>
<td width="4%" class="sinde" align="center"><?php /* se imprime la intensidad horaria de la materia */ echo $row_asignaturas['inthora']; ?></td>
<?php 
/* se realiza la consulta de notas para el periodo 1 */
mysql_select_db($database_pxndx920720, $pxndx920720);
$query_notas = "SELECT * FROM alnotas WHERE idalumno ='$idestudiante' and idmateria ='$idarea' and periodo = 1 ";
$notas = mysql_query($query_notas, $pxndx920720) or die(mysql_error());
$row_notas = mysql_fetch_assoc($notas);
$totalRows_notas = mysql_num_rows($notas);
/* se realiza la consulta de notas para el periodo 2 */
mysql_select_db($database_pxndx920720, $pxndx920720);
$query_notasb = "SELECT * FROM alnotas WHERE idalumno ='$idestudiante' and idmateria ='$idarea' and periodo = 2 ";
$notasb = mysql_query($query_notasb, $pxndx920720) or die(mysql_error());
$row_notasb = mysql_fetch_assoc($notasb);
$totalRows_notasb = mysql_num_rows($notasb);
/* se realiza la consulta de notas para el periodo 3 */
mysql_select_db($database_pxndx920720, $pxndx920720);
$query_notasc = "SELECT * FROM alnotas WHERE idalumno ='$idestudiante' and idmateria ='$idarea' and periodo = 3 ";
$notasc = mysql_query($query_notasc, $pxndx920720) or die(mysql_error());
$row_notasc = mysql_fetch_assoc($notasc);
$totalRows_notas = mysql_num_rows($notasc);
/* se realiza la consulta de notas para el periodo 4 */
mysql_select_db($database_pxndx920720, $pxndx920720);
$query_notasd = "SELECT * FROM alnotas WHERE idalumno ='$idestudiante' and idmateria ='$idarea' and periodo = 4 ";
$notasd = mysql_query($query_notasd, $pxndx920720) or die(mysql_error());
$row_notasd = mysql_fetch_assoc($notasd);
$totalRows_notasd = mysql_num_rows($notasd);
?>
<td width="6%" class="sinde" align="center"> <?php /* se raliza una consulta para identificar el perido consultado y dependiendo de ello se imprimen las fallas de dicho periodo */
if ($periodo ==1)
{ echo $row_notas['fallas'];}
if ($periodo ==2)
{ echo $row_notasb['fallas'];}
if ($periodo ==3)
{ echo $row_notasc['fallas'];}
if ($periodo ==3)
{ echo $row_notasd['fallas'];}
?></td>
    <td width="46%" class="sindelo" align="justify"><?php /* se raliza una consulta para identificar el perido consultado y dependiendo de ello se imprimen los logros de dicho periodo */
if ($periodo==1)
{  
echo $row_asignaturas['logroa'];
}
if ($periodo==2)
{  
echo $row_asignaturas['logrob'];
}
if ($periodo==3)
{  
echo $row_asignaturas['logroc']; }
if ($periodo==4)
{  
echo $row_asignaturas['logrod'];
}
?></td>
    <td width="3%" class="sinde" align="center"><?php
/* se imprimela nota del perido 1 */
$nota1=$row_notas['nota'];
echo $row_notas['nota'];

?></td>
    <td width="4%" class="sinde" align="center"><?php 
/* se imprimela nota del perido 2 */
$nota2=$row_notasb['nota'];
echo $row_notasb['nota'];

?></td>
    <td width="3%" class="sinde" align="center"><?php 
/* se imprimela nota del perido 3 */
$nota3=$row_notasc['nota'];
echo $row_notasc['nota'];

?></td>
    <td width="3%" class="sinde" align="center"><?php 
/* se imprimela nota del perido 4 */
$nota4=$row_notasd['nota'];
echo $row_notasd['nota'];

?></td>
    <td width="6%" class="sinde" align="center">   
    <?php 
/* si el periodo es igual a 4 se realiza el promedio con todos los peroidos y se imprime */
if ($periodo == 4)
{
$suma=$nota1+$nota2+$nota3+$nota4;
$final=$suma/4;
echo $final;
}
?></td>
  </tr>
  <?php } /* se acaba el cilo de materias */while ($row_asignaturas = mysql_fetch_assoc($asignaturas)); ?>
<!--se cierra la tabla de notas--></table>
<p>&nbsp;</p>
<!--se imprime espacio para observaciones-->
<p>Observaciones:</p>
<p>&nbsp;</p>
<!--seimprime tabla de firmas-->
<table width="100%" border="0">
  <tr>
    <td width="6%">&nbsp;</td>
    <td width="21%">&nbsp;</td>
    <!--se incrusta la firma del rector y otros campos-->
    <td width="35%"><div align="center"><img src="firmarec.jpg" width="201" height="89" /></div></td>
    <td width="38%">&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <th align="center"><p class="arriba">Rector (a)</p></th>
    <th align="center"><p class="arriba">Profesor (a)</p></th>
  </tr>
</table>
<!--se acaba la tabla-->
<p>&nbsp;</p>
<!--se inicia la tabla del pie del pdf-->
<table width="100%" border="0">
  <tr>
    <td align="justify" class="legal"><hr />
    <!--se imprime el letrero de contenido legal-->
    La presente certificacion electronica tiene validez juridica y legal en colombia, conforme a la ley 527 de 1991, el decreto reglamentario 1747 de 2.000 y las demas normas que la complementen, modifiquen o reemplacen. Para verificar la autenticidad de cualquier copia impresa , se debera efectuar la consulta atrav&eacute;z de la pagina web de la institucion, en la cual se encuentra todo el documento digital original bajo en numero <?php /* se imprimime cadena de consulta */echo $idestudiante.$periodo.$ano; ?>.</td>
  </tr>
</table>
<!--se cierra la ultima tabla y se hace un salto de pagina para repetir todo el proceso con otro alumno-->
<div style="page-break-after: always;" /></div>
<?php
/* se cierran todas las consultas realizadas en este ciclo para dar espacio ala siguiente hasta que el ciclo acabe y asi liberar memoria */

mysql_free_result($estudiante);

mysql_free_result($asignaturas);

mysql_free_result($notas);

mysql_free_result($notasb);

mysql_free_result($notasc);

mysql_free_result($notasd);
}
/* se cierra el ciclo de la consulta de estudiantes en el grado */
 while ($row_bucle = mysql_fetch_assoc($bucle));
/*se cierran las 3 consultas realizadas el comienzo para liberar memoria*/
mysql_free_result($logocolegio);

mysql_free_result($bucle);

mysql_free_result($infocolegio);
 ?>
 <!--se acaba y se cierra el documento-->
</body></html>

[/CODIGO PHP]

ESPERO ME PUEDAN AYUDAR SI ALGO MI CORREO ES ALEXAN...@HOTMAIL.COM Y MI TW ES @ALEXANDROX92 







alexandrox92

unread,
May 3, 2012, 9:16:39 AM5/3/12
to dom...@googlegroups.com
Amigos del foro Encontre la solucion veran se trata d q el documento se generaba con casi 70 paginas y pues el PHP tiene un timeout que no permite nada x mas de 30 seg entnoces solo devi cambiar en el PHP.ini esos 30 por -1 y ya el dompdf funciona al vuelo .

= gracias :)

BrianS

unread,
May 15, 2012, 10:56:08 PM5/15/12
to dom...@googlegroups.com
I see you've resolved your issue. Just FYI, tables do require significantly more processing power and ram to track the table layout. The bigger or more complex the table the more resources you will need.
Reply all
Reply to author
Forward
0 new messages