codice:
// qui le varie impostazioni del pdf
$pdf = new PDF('L', 'mm', 'A4', true, 'UTF-8', false);
$pdf->SetMargins(5, 50, 5);
$pdf->SetAutoPageBreak(true, 8);
$pdf->AddPage();
// connessione al db
$conn_db = mysqli_connect($host, $username, $password, $database);
mysqli_set_charset($conn_db, "utf8");
$result=mysqli_query($conn_db, "SELECT * FROM .....
$posizione_y=50; // posizione di start della prima multicell da stampare
while($row = mysqli_fetch_array($result)) { //eseguo il ciclo while per estrarre i dati interessati dal db
$id=$row['Id'];
$data=$row['Data'];
$ora=$row['Ora'];
$descrizione=$row['Descrizione'];
$ricambi=$row['Ricambi'];
$note=$row['Note'];
$h_cell_des = $pdf->getNumLines($descrizione, 90)*4; // recupero valore altezza cella descrizione
$h_cell_ricambi = $pdf->getNumLines($ricambi, 90)*4; // recupero valore altezza cella ricambi
$h_cell_note = $pdf->getNumLines($note, 90)*4; // recupero valore altezza cella note
// il 90 è la larghezza impostata della multicell
// il 4 è un numero che varia in base alla dimensione del carattere
$array = array($h_cell_des, $h_cell_ricambi, $h_cell_note); // inserisco le 3 o più variabili in un array
rsort($array); // ordino l'array dal maggiore al minore
$h_cell= $array[0]; // recupero il valore di quello maggiore
if($h_cell<7)$h_cell=7; // nel caso il valore fosse inferiore a (7 in questo caso) forzo l'altezza a 7
// dalla posizione y attuale sommo all'altezza della multicell successiva (nel caso ci fosse). Se il valore è uguale o superiore al punto massimo dell'ultima multicell che voglio stampare sulla pagina (y=200), ripristino al valore iniziale di y e aggiungo una nuova pagina.
if ($posizione_y+$h_cell>=200){
$posizione_y=50;
$pdf->AddPage();
}
// queste righe non hanno bisogno di commenti (notare solo $h_cell) come impostazione altezza multicell
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('helvetica','',8);
$pdf->SetFillColor(255,255,255);
$pdf->MultiCell(10,$h_cell,$id, 1,'C', true, 0, '', '', true, 0, false, false, 0, 'M', true);
$pdf->MultiCell(20,$h_cell,$data_it, 1, 'C', true, 0, '', '', true, 0, false, false, 0, 'M', true);
$pdf->MultiCell(90,$H_cell,$descrizione, 1,'L', true, 0, '', '', true, 0, false, false, 0, 'M', true);
$pdf->MultiCell(90,$H_cell,$ricambi, 1,'L', true, 0, '', '', true, 0, false, false, 0, 'M', true);
$pdf->MultiCell(90,$H_cell,$note, 1, 'L', true, 1, '', '', true, 0, false, false, 0, 'M', true);
$posizione_y=$posizione_y+$h_cell; // ricalcolo il valore di posizione_y e aggiungo il valore dell'altezza della multicell stampata
}
.....ecc.
Con questo sistema tutta la riga stampata ha l'altezza della cella che occupa più spazio in altezza e in più nel caso di più pagine, il salto pagina avviene non appena una cella non riesce a stare dentro la misura impostata della pagina. Si noterà infatti che l'ultima cella stampata su ogni pagina potrà avere una distanza diversa dal bordo inferiore.