У меня проблемы с многомерным массивом и его значением.
То, что я ищу, из моего запроса я ищу имя учителя в массиве. И после этого я хочу создать pdf, используя dompdf. Проблема связана с циклом. Я не могу создать правильный цикл, который будет работать так, как я хочу, чтобы он работал. Мой пример запроса
$q11 = "select id from teachers order by teacher "; $r11 = mysql_query($q11) or die(mysql_error()); while($rows11 = mysql_fetch_array($r11)){ $teacher = $rows11['id']; $dompdf->"It will start working"; }
Теперь я знаю, этот код запутан, но я хочу, чтобы он создавал dompdf для каждого учителя в одном файле PDF. Как и из запроса, он должен привлекать учителей, и для каждого учителя он должен создать страницу dompdf. В настоящее время он делает только одну страницу в соответствии с последним значением, которое имеет мой запрос.
Пожалуйста помоги. Это очень срочно.
Ваша петля работает нормально. То, как вы добавляете страницы в свой 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
поставляемую с 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
будет начинаться новая страница после каждого контейнера
Надеюсь, это поможет, получайте удовольствие, пытаясь 🙂
По-видимому, проблем с переполнением и результатов не превышает допустимого поля листа, вы можете сделать это, чтобы отделить данные от родителя в другой таблице и поставить между ними:
<div style="page-break-before: always;"></div>