sql >> Base de Datos >  >> RDS >> Mysql

Cómo crear varias páginas con dompdf

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 :)