2012-12-30 16 views
11

Mam problem z tablicą wielowymiarową i jej wartością.Tworzenie kilku stron przy pomocy dompdf

Czego szukam, to z mojego zapytania szukam nazwiska nauczycieli w tablicy. A potem chcę utworzyć plik pdf za pomocą dompdf. Problem polega na pętli. Nie jestem w stanie stworzyć odpowiedniej pętli, która zadziała tak, jak chcę, aby działała. Moja próbka zapytanie jest

$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"; 
    } 

Teraz wiem, kod ten jest mylący, ale to, co chcę, to powinno stworzyć dompdf dla każdego nauczyciela w jednym pliku pdf. Podobnie jak w zapytaniu, powinno przyciągać nauczycieli, a dla każdego nauczyciela powinno tworzyć stronę dompdf. Obecnie tworzy jedną stronę zgodnie z ostatnią wartością wyszukiwaną przez moje zapytanie.

Proszę o pomoc. To trochę pilne.

+2

Odradzam korzystanie z funkcji mysql_ * w celu uzyskania dostępu do bazy danych. Są stare, słabo obsługiwane i przestarzałe pod wszystkimi nazwami (ale będą przestarzałe od PHP 5.5). Sugerowałbym zamianę na bardziej nowoczesny system, taki jak mysqli lub PDO. – GordonM

+0

Brzmi, jakby to nie był problem z wielowymiarową tablicą lub pętlą, ale z odpowiednim użyciem '$ dompdf'. –

Odpowiedz

23

Twoja pętla działa prawidłowo. Sposób dodawania stron do pliku PDF jest prawdopodobnie błędny. Wygląda na to, że nadpisujesz jedną stronę raz za razem, zamiast dołączać nową.

EDIT

nigdy nie używałem dompdf. Szybkie przejrzenie dokumentacji pozwala mi sądzić, że tworzysz coś w rodzaju znaczników HTML, które są następnie konwertowane na format PDF. Czy to prawda?

Przykład kodu

$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ę o nietypowej składni $var = <<<HTML \r\nHTML, że to heredoc. Bardziej wygodne jest używanie heredoc, gdy masz dużo obcy kod inline, może to mieć zmienne {$varname} i nie musisz się martwić o cytaty. Wszystko, co musisz zrobić, aby upewnić się, że jest heredoc bliżej HTML jest w nowej linii i nie wcięte.

EDIT2

Nadal nie jestem pewien, które biblioteki używasz. Uważam, że this extension wygląda całkiem nieźle i nazywa się dompdf, tak jak powiedziałeś w swoim pytaniu.

Twój najnowszy komentarz wskazuje, że dotychczas nie rozwiązałeś problemu, więc postanowiłem dodać więcej informacji, aby dotrzeć do celu.

Zastrzeżenie: Nie będę pisać kod funkcjonalny i nie będę przetestować, ale następujące wskazówki popchnie cię w dobrym kierunku, aby dostać swoje rzeczy zrobić.

dompdf jest w stanie odczytać właściwości CSS2 i CSS3 dokumentu wejściowego.

Każdy cykl w powyższej pętli while reprezentuje jednego nauczyciela, z którego każdy otrzymuje własną stronę w dokumencie wyjściowym.

Umieszczam stronę w pojemniku div z klasą teacherPage. Możesz wypełnić ten kontener wszystkimi informacjami, które chcesz wyświetlić nauczycielowi.

Teraz wszystko, co musimy zrobić, to powiedzieć dompdf każdy teacherPage to nowa strona. Można to zrobić, używając @page znaczników Dodałem pusty kontener css <style type="text/css"></style> do przykładowego dokumentu powyżej, to tam powinna iść stylizacja strony.

Przykład CSS

@page teacher { 
    size: A4 portrait; 
    margin: 2cm; 
} 

.teacherPage { 
    page: teacher; 
    page-break-after: always; 
} 

Z @page można zdefiniować nazwie strony teacher, które mogą mieć właściwości ważnych dla całej strony kontenera.

page-break-after: always rozpocznie nową stronę po każdym pojemniku

Hope this helps, próbując bawić :)

+0

Zgaduję, że to prawda, ale jak mogę zatrzymać to nadpisanie i przejść do następnej strony? –

+0

Należy to wyjaśnić w instrukcji obsługi dowolnej biblioteki pdf, z której korzystasz. –

+0

dodał przykład css dla ciebie, mam nadzieję, że to pomoże –

10

najwyraźniej żadnych problemów przepełnienia, a wyniki biorą więcej niż dopuszczalny margines arkusza, można należy oddzielić dane od obiektu nadrzędnego w innej tabeli i umieścić między nimi:

<div style="page-break-before: always;"></div> 
Powiązane problemy