2012-12-30 17 views
11

Ho problemi con la matrice multidimensionale e il suo valore.Come creare più pagine con dompdf

Quello che sto cercando è, dalla mia domanda sto cercando il nome degli insegnanti nella matrice. E dopo voglio creare un pdf usando dompdf. Il problema è con il loop. Non sono in grado di creare un ciclo appropriato che funzionerà nel modo in cui voglio che funzioni. La mia query di esempio è

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

Ora lo so, questo codice è confusa, ma quello che voglio è, dovrebbe creare dompdf per ogni insegnante in un unico file pdf. Come dalla query, dovrebbe andare a prendere gli insegnanti, e per ogni insegnante dovrebbe creare una pagina dompdf. Attualmente sta facendo una sola pagina in base all'ultimo valore che la mia query ha cercato.

Per favore aiuto. È abbastanza urgente.

+2

vorrei consigliare di non usare mysql_ * funzioni per l'accesso al database. Sono vecchi, scarsamente supportati e deprecati in tutto tranne il nome (e saranno deprecati a partire da PHP 5.5). Suggerirei di passare a un sistema più moderno come mysqli o PDO. – GordonM

+0

Sembra che non sia un problema con array o loop multidimensionali ma con l'uso corretto di '$ dompdf'. –

risposta

23

Il ciclo funziona correttamente. Il modo in cui aggiungi pagine al tuo PDF è probabilmente sbagliato. Apparentemente stai sovrascrivendo una pagina ancora e ancora invece di allegarne una nuova.

EDIT

ho mai usato dompdf. Un rapido sguardo ai documenti mi fa pensare che tu crei qualcosa come un codice HTML che poi viene convertito in PDF, ho capito bene?

codice di esempio

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

Se vi domandate circa l'insolito sintassi $var = <<<HTML \r\nHTML, che è un heredoc. E 'solo più comodo usare heredocs quando hai un sacco di codice inline alieno, questo può avere variabili {$varname} e non devi preoccuparti di virgolette. Tutto quello che devi fare è assicurarti che heredoc close HTML si trova in una nuova riga e non è rientrato.

EDIT2

Ancora non troppo sicuro, quale libreria si sta utilizzando. Trovo che lo this extension abbia un bell'aspetto e si chiama dompdf, proprio come hai detto nella tua domanda.

Il tuo ultimo commento indica che non hai risolto il problema fino a questo momento, quindi ho deciso di aggiungere ulteriori informazioni per raggiungere l'obiettivo.

Diniego: Non ho intenzione di scrivere codice funzionale e non voglio provare questo, ma i seguenti suggerimenti vi spingere nella giusta direzione per ottenere il vostro roba fatta.

dompdf è in grado di leggere le proprietà CSS2 e CSS3 del documento di input.

Ogni ciclo nel ciclo while in alto rappresenta un insegnante in cui ognuno di essi ottiene una propria pagina nel documento di output.

Ho messo la pagina in un contenitore div con la classe teacherPage. È possibile riempire questo contenitore con tutte le informazioni che si desidera visualizzare per un insegnante.

Ora tutto ciò che dobbiamo fare è dire a dompdf che ogni teacherPage è una nuova pagina. Questo può essere fatto utilizzando @page markup shipped with CSS3

ho aggiunto un contenitore vuoto css <style type="text/css"></style> al documento esempio di cui sopra, è lì che la pagina di stile dovrebbe andare.

L'esempio CSS

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

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

Con @page è possibile definire un nome pagina teacher, che può avere proprietà valide per il contenitore di tutta la pagina.

page-break-after: always inizierà una nuova pagina dopo ogni contenitore

Spero che questo aiuti, divertirsi cercando :)

+0

Immagino che sia giusto, ma come posso smettere di sovrascriverlo e andare alla pagina successiva? –

+0

Dovrebbe essere spiegato in manuale a qualsiasi libreria pdf utilizzata. –

+0

aggiunto un esempio di css per te, spero che questo aiuti –

10

apparentemente alcun problema di overflow ed i risultati stanno prendendo oltre il margine consentito del foglio, è possibile fare è quello di separare i dati dai genitori in un altro tavolo e mettere tra loro:

<div style="page-break-before: always;"></div>