Ответ 1
Ваша петля работает нормально. То, как вы добавляете страницы в свой PDF файл, вероятно, неверно. По-видимому, вы перезаписываете одну страницу снова и снова, а не добавляете новую.
ИЗМЕНИТЬ
Я никогда не использовал dompdf. Быстрый взгляд на документы позволяет мне думать, что вы создаете что-то вроде разметки HTML, которая затем преобразуется в PDF, я правильно понял?
Пример кода
$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");
Если вы задаетесь вопросом о необычном синтаксисе $var = <<<HTML \r\nHTML
, это heredoc. Гораздо удобнее использовать heredocs, когда у вас много чужого встроенного кода, у этого могут быть переменные {$varname}
, и вам не нужно беспокоиться о котировках. Все, что вам нужно, чтобы убедиться, что heredoc ближе HTML
находится в новой строке и не имеет отступов.
EDIT2
Все еще не слишком уверен, какую библиотеку вы используете. Я нахожу это расширение довольно неплохо, и он называется dompdf, так же, как вы сказали в своем вопросе.
Ваш последний комментарий указывает, что вы не решили вашу проблему до сих пор, поэтому я решил добавить дополнительную информацию, чтобы довести вас до цели.
Отказ от ответственности: я не буду писать функциональный код, и я не буду проверять это, но следующие подсказки будут подталкивать вас в правильном направлении, чтобы сделать ваши вещи.
dompdf может читать свойства CSS2 и CSS3 вашего входного документа.
Каждый цикл в цикле while
выше представляет собой один преподаватель, каждый из которых получает собственную страницу в выходном документе.
Я помещаю страницу в контейнер div с классом teacherPage
. Вы можете заполнить этот контейнер всей информацией, которую вы хотите отобразить для учителя.
Теперь все, что нам нужно сделать, это сказать dompdf, каждый teacherPage
- это новая страница. Это можно сделать, используя @page
markup поставляемый с CSS3
Я добавил пустой пример css-контейнера <style type="text/css"></style>
в примерный документ выше, где должен выглядеть стиль страницы.
Пример CSS
@page teacher {
size: A4 portrait;
margin: 2cm;
}
.teacherPage {
page: teacher;
page-break-after: always;
}
С помощью @page
вы можете определить именованную страницу teacher
, которая может иметь свойства, допустимые для всего контейнера страницы.
page-break-after: always
начнет новую страницу после каждого контейнера
Надеюсь, что это поможет, получайте удовольствие, пытаясь:)