Twoja pętla działa dobrze. Sposób dodawania stron do pliku PDF jest prawdopodobnie niewłaściwy. Najwyraźniej ciągle nadpisujesz jedną stronę zamiast dołączać nową.
EDYTUJ
Nigdy nie korzystałem z dompdf. Szybkie spojrzenie na dokumenty pozwala mi pomyśleć, że tworzysz coś w rodzaju znacznika HTML, który następnie jest konwertowany na plik PDF, czy dobrze zrozumiałem?
Przykładowy kod
$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");
Jeśli zastanawiasz się nad niezwykłą składnią $var = <<<HTML \r\nHTML
, to jest heredoc . Po prostu wygodniej jest używać dokumentów heredocs, gdy masz dużo obcego kodu wbudowanego, który może mieć zmienne {$varname}
i nie musisz się martwić o cytaty. Wszystko, czego musisz się upewnić, to to, że heredoc bliżej HTML
jest w nowej linii i nie ma wcięcia.
EDYTUJ2
Nadal nie jestem pewien, której biblioteki używasz. Znalazłem to rozszerzenie wygląda całkiem nieźle i nazywa się dompdf, tak jak powiedziałeś w swoim pytaniu.
Twój ostatni komentarz wskazuje, że do tej pory nie rozwiązałeś swojego problemu, więc postanowiłem dodać więcej informacji, aby dotrzeć do celu.
dompdf może odczytać właściwości CSS2 i CSS3 dokumentu wejściowego.
Każdy cykl w while
pętla powyżej reprezentuje jednego nauczyciela, z którego każdy otrzymuje własną stronę w dokumencie wyjściowym.
Umieściłem stronę w kontenerze div z klasą teacherPage
. Możesz wypełnić ten pojemnik wszystkimi informacjami, które chcesz wyświetlić dla nauczyciela.
Teraz wszystko, co musimy zrobić, to poinformować dompdf o każdej teacherPage
to nowa strona. Można to zrobić za pomocą @page
znacznik dostarczony z CSS3
Dodałem pusty kontener css <style type="text/css"></style>
do przykładowego dokumentu powyżej, to właśnie tam powinna iść stylizacja strony.
Przykładowy CSS
@page teacher {
size: A4 portrait;
margin: 2cm;
}
.teacherPage {
page: teacher;
page-break-after: always;
}
Z @page
możesz zdefiniować nazwaną stronę teacher
, które mogą mieć właściwości ważne dla całego kontenera strony.
page-break-after: always
rozpocznie nową stronę po każdym kontenerze
Mam nadzieję, że to pomoże, baw się dobrze :)