Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    68

    Altezza multicell di tcpdf

    Ciao a tutti,
    avrei cortesemente bisogno di un aiuto se possibile per fare in modo che in una tabella generata con tcpdf e multicell, tutte le celle sulla stessa riga abbiano la medesima altezza di quella che richiede una maggiore altezza anche se il testo all'interno è di una sola riga.
    Ho cercato sul forum, ma ho trovato solo 7 post e che nessuno parlasse di questo problema.
    Qualcuno ha già fatto?

    Grazie
    Federico

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Non sono affatto familiar con la libreria in questione, però, la questione viene dipanata qui:

    http://www.onemoretake.com/2009/03/2...ith-multicell/

    conviene anche che leggi nei commenti (come suggerito dell'autore) per ulteriori informazioni
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    68
    Grazie mille.
    Appena posso provo.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    68
    Rieccomi, ho letto l'articolo di Dan il quale mi ha fatto venire un'idea.
    Utilizzando la funzione getNumLines e adattandola alle mie esigienze ho fatto in modo che le multicell di un documento pdf generato dall'estrazione di dati da Mysql adattasse l'altezza della cella a quella con maggior numero di righe di un record di una determinata riga.
    Di seguito il codice commentato.

    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.

    Spero che il codice sia comprensibile.
    Ciao
    Federico

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.