Tu bucle está funcionando 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. Una mirada rápida a los documentos me permite pensar que creas algo como un marcado HTML que luego se convierte en PDF, ¿lo 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 se pregunta acerca de la sintaxis inusual $var = <<<HTML \r\nHTML
, eso es un heredoc . Es más cómodo usar heredocs cuando tienes mucho código alienígena en línea, esto puede tener variables {$varname}
y no necesita preocuparse por las cotizaciones. Todo lo que necesita para asegurarse es que heredoc se acerque a HTML
está en una línea nueva y sin sangría.
EDITAR2
Todavía no estoy muy seguro de qué biblioteca está utilizando. Encuentro esta extensión se ve bastante bien y se llama dompdf, tal como dijiste en tu pregunta.
Su último comentario indica que no resolvió su problema hasta ahora, por lo que decidí agregar más información para llegar al objetivo.
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.
Puse la página en un contenedor div con la clase teacherPage
. Puede llenar este contenedor con toda la información que desea que se muestre para un maestro.
Ahora todo lo que tenemos que hacer es decirle a dompdf cada teacherPage
es una pagina nueva. 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 CSS de ejemplo
@page teacher {
size: A4 portrait;
margin: 2cm;
}
.teacherPage {
page: teacher;
page-break-after: always;
}
Con @page
puede definir una página nombrada 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 :)