Как создать несколько страниц с dompdf
У меня возникли проблемы с многомерным массивом и его значением.
то , что я ищу, из моего запроса я ищу имя учителя в массиве. И после этого я хочу создать 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. В настоящее время он делает только одну страницу в соответствии с последним значением, которое мой запрос имеет поиск.
пожалуйста, помогите. Это срочно.
2 ответов
ваш цикл работает нормально. Способ добавления страниц в 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>