Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment créer plusieurs pages avec dompdf

Ta boucle fonctionne bien. La façon dont vous ajoutez des pages à votre PDF est probablement erronée. Apparemment, vous écrasez une page encore et encore au lieu d'en joindre une nouvelle.

MODIFIER

Je n'ai jamais utilisé dompdf. Un rapide coup d'œil dans la documentation me laisse penser que vous créez quelque chose comme un balisage HTML qui est ensuite converti en PDF, ai-je bien compris ?

Exemple de code

$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 vous vous interrogez sur la syntaxe inhabituelle $var = <<<HTML \r\nHTML , c'est un heredoc . Il est juste plus confortable d'utiliser heredocs lorsque vous avez beaucoup de code en ligne extraterrestre, cela peut avoir des variables {$varname} et vous n'avez pas à vous soucier des devis. Tout ce dont vous avez besoin pour vous assurer, c'est que heredoc plus proche HTML est dans une nouvelle ligne et non en retrait.

EDIT2

Vous ne savez toujours pas quelle bibliothèque vous utilisez. Je trouve cette extension ça a l'air plutôt bien et ça s'appelle dompdf, comme vous l'avez dit dans votre question.

Votre dernier commentaire indique que vous n'avez pas résolu votre problème jusqu'à présent, j'ai donc décidé d'ajouter quelques informations supplémentaires pour vous amener à la cible.

dompdf est capable de lire les propriétés CSS2 et CSS3 de votre document d'entrée.

Chaque cycle dans le while La boucle ci-dessus représente un enseignant dont chacun obtient sa propre page dans le document de sortie.

Je mets la page dans un conteneur div avec la classe teacherPage . Vous pouvez remplir ce conteneur avec toutes les informations que vous souhaitez afficher pour un enseignant.

Maintenant, tout ce que nous devons faire, c'est dire à dompdf chaque teacherPage est une nouvelle page. Cela peut être fait en utilisant @page balisage livré avec CSS3

J'ai ajouté un conteneur CSS vide <style type="text/css"></style> à l'exemple de document ci-dessus, c'est là que le style de page doit aller.

L'exemple CSS

@page teacher {
  size: A4 portrait;
  margin: 2cm;
}

.teacherPage {
   page: teacher;
   page-break-after: always;
}

Avec @page vous pouvez définir une page nommée teacher , qui peuvent avoir des propriétés valides pour l'ensemble du conteneur de pages.

page-break-after: always commencera une nouvelle page après chaque conteneur

J'espère que cela vous aidera, amusez-vous à essayer :)