Как создать несколько страниц с 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>