Solución:
Tu bucle funciona bien. La forma en que agrega páginas a su PDF probablemente sea incorrecta. Aparentemente, está sobrescribiendo una página una y otra vez en lugar de adjuntar una nueva.
EDITAR
Nunca he usado dompdf. Un vistazo rápido a los documentos me permite pensar que creaste algo como un marcado HTML que luego se convierte en PDF, ¿entendí bien?
Código de ejemplo
$html = <<<HTML
<html>
<head>
<style type="text/css">
/* Your document styling goes here */
</style>
</head>
<body>
HTML;
while ( $row = $dbResult->fetch_assoc() ) {
$html .= '<div class="teacherPage">'
. $row['name'] // your teacher document goes here
'</div>';
}
$html .= '</body></html>';
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream("sample.pdf");
Si te preguntas acerca de la sintaxis inusual $var = <<<HTML rnHTML
, eso es un heredoc. Es más cómodo usar heredocs cuando tienes mucho código extraterrestre en línea, esto puede tener variables {$varname}
y no necesita preocuparse por las cotizaciones. Todo lo que necesitas para asegurarte es que heredoc esté más cerca HTML
está en una nueva línea y no tiene sangría.
EDIT2
Aún no estoy muy seguro de qué biblioteca estás usando. Encuentro que esta extensión se ve bastante bien y se llama dompdf, tal como dijo en su pregunta.
Su último comentario indica que no resolvió su problema hasta ahora, así que decidí agregar más información para llegar al objetivo.
Descargo de responsabilidad: no voy a escribir código funcional y no lo probaré, pero las siguientes sugerencias lo empujarán en la dirección correcta para hacer sus cosas.
dompdf puede leer las propiedades CSS2 y CSS3 de su documento de entrada.
Cada ciclo en el while
El bucle anterior representa a un maestro y cada uno de ellos obtiene una página propia en el documento de salida.
Pongo la página en un contenedor div con la clase. teacherPage
. Puedes llenar este contenedor con toda la información que quieras que se le muestre a un profesor.
Ahora todo lo que tenemos que hacer es decirle a dompdf cada teacherPage
es una nueva página. Esto se puede hacer usando @page
marcado enviado con CSS3
Agregué un contenedor css vacío <style type="text/css"></style>
al documento de ejemplo anterior, ahí es donde debe ir el estilo de la página.
El ejemplo de CSS
@page teacher {
size: A4 portrait;
margin: 2cm;
}
.teacherPage {
page: teacher;
page-break-after: always;
}
Con @page
puedes definir una página con nombre teacher
, que puede tener propiedades válidas para todo el contenedor de la página.
page-break-after: always
comenzará una nueva página después de cada contenedor
Espero que esto ayude, diviértete intentándolo 🙂
Al parecer, no hay problemas de desbordamiento y los resultados están tomando más del margen permitido de la hoja. Lo que puede hacer es separar los datos del padre en otra tabla y ponerlos entre ellos:
<div style="page-break-before: always;"></div>