Visualizzazione dei risultati da 1 a 9 su 9

Discussione: tabelle e fpdf

  1. #1

    tabelle e fpdf

    Saluti a tutti
    ho creato, estraendo dati da 1 tabella di mysql e tramite fpdf, una tabella che contiene 5 colonne:

    | data intervento | titolo | descrizione | tecnico | data inserimento. |

    il problema si verifica quanto il testo contenuto nel campo es.: descrizione è più lungo dello spazio che ha in orizzontale nella riga, quidi sono qui ad elemosinare un'idea di come far andare a capo la descrizione quando raggiunge il suo margine destro della sua colonna


    grazie a tutti



  2. #2
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    ma quale funzione usi per scrivere il testo?

    se usi MultiCell dovrebbe andare a capo in automatico.


  3. #3
    Ciao, ebbene si all'interno della multicell il testo va a capo, ma ogni multicell va a capo rispetto all'altra ovvero non rimangono sulla stessa riga come bravi quadretti allineati anche se di altezze diverse,
    sto pascolando il sito di fpdf ma trovo soluzioni per me difficili da comprendere,

    ciao e grazie
    Giovanni

  4. #4
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    il problema è che MultiCell quando 'finisce' imposta X e Y a capo .... quello che devi fare è riportarle su... più o meno una cosa del genere:

    Codice PHP:
    $valorey=$pdf->GetY();
    $pdf->SetY($valorey);
    $pdf->MultiCell(60,5,"tuo testo nella prima cella");
    $pdf->SetY($valorey);
    $pdf->MultiCell(60,5,"tuo testo nella seconda cella");
    $pdf->SetY($valorey);
    $pdf->MultiCell(60,5,"tuo testo nella terza cella");
    $valorey=$pdf->GetY();
    $pdf->MultiCell(60,5,"tuo testo nella prima cella ma seconda riga");
    $pdf->SetY($valorey);
    $pdf->MultiCell(60,5,"tuo testo nella seconda cella e seconda riga");

    ....
    ecc 

  5. #5
    Ias Grazie per la pazienza, ti posto il codice modificato secondo i tuoi consigli

    $w = array(23,45,60,25,25);

    //intestazione tabelle

    $pdf->Cell($w[0],5,'data intervento',1,0,'C');

    $pdf->Cell($w[1],5,'titolo',1,0,'C');

    $pdf->Cell($w[2],5,'descrizione',1,0,'C');

    $pdf->Cell($w[3],5,'tecnico incaricato',1,0,'C');

    $pdf->Cell($w[4],5,'data inserimento',1,1,'C');



    while ($man = mysql_fetch_array($result_man)){

    $Y = $pdf->GetY();

    $pdf->SetY($Y);

    $pdf->MultiCell($w[0],5,$man['data_intervento']);

    $pdf->SetY($Y);

    $pdf->MultiCell($w[1],5,$man['titolo_intervento']);

    $pdf->SetY($Y);

    $pdf->MultiCell($w[2],5,$man['descrizione_intervento']);

    $Y = $pdf->GetY();

    $pdf->SetY($Y);

    $pdf->MultiCell($w[3],5,$man['tecnico']);

    $pdf->SetY($Y);

    $pdf->MultiCell($w[4],5,$man['data_inserimento']);

    }

    però le celle mi vengono stampate e sovrapposte tutte a sinistra: penso di dover verificare anche un incremento di X per farle spostare verso sinistra man mano che la riga viene composta ?

    Ciao
    Giovanni

  6. #6
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    si esatto, e tra l'altro dovresti anche registrare il caso in cui in una colonna si vada a capo.
    dovrebbe essere così:

    Codice PHP:
    $nuovaY $pdf->GetY(); 
    while (
    $man mysql_fetch_array($result_man)){
    $Y $pdf->GetY();
    $X $pdf->GetX();

    $pdf->MultiCell($w[0],5,$man['data_intervento']);
    $X=$X+$w[0];
    if(
    $pdf->GetY()>=$nuovaY){$nuovaY=$pdf->GetY();}
    $pdf->SetY($Y);
    $pdf->SetX($X);


    $pdf->MultiCell($w[1],5,$man['titolo_intervento']);
    $X=$X+$w[1];
    if(
    $pdf->GetY()>=$nuovaY){$nuovaY=$pdf->GetY();}
    $pdf->SetY($Y);
    $pdf->SetX($X);

    $pdf->MultiCell($w[2],5,$man['descrizione_intervento']);
    $X=$X+$w[2];
    if(
    $pdf->GetY()>=$nuovaY){$nuovaY=$pdf->GetY();}
    $pdf->SetY($Y);
    $pdf->SetX($X);

    $pdf->MultiCell($w[3],5,$man['tecnico']);
    $X=$X+$w[3];
    if(
    $pdf->GetY()>=$nuovaY){$nuovaY=$pdf->GetY();}
    $pdf->SetY($Y);
    $pdf->SetX($X);

    $pdf->MultiCell($w[4],5,$man['data_inserimento']);
    $pdf->SetY($nuovaY);


  7. #7
    Grazie mille Ias, sia perchè mi hai risolto il problema sia per l'attenzione al problema.
    intanto ho fatto copiaincolla
    e poi me lo leggo con calmissima e cerco di capirlo



    Giovanni

  8. #8
    Utente di HTML.it L'avatar di otello
    Registrato dal
    May 2003
    Messaggi
    296
    Riprendo il topic per aggiungere una richiesta.
    se utilizzo il codice di Ias :

    Codice PHP:
                $nuovaY $this->GetY();
                 
    $Y $this->GetY();
                 
    $X $this->GetX();

                 
    $this->MultiCell($w[0],5,$row[0],'LR','C',$fill);
                 
    $X=$X+$w[0];
                 if(
    $this->GetY()>=$nuovaY){$nuovaY=$this->GetY();}
                 
    $this->SetY($Y);
                 
    $this->SetX($X);

                 
    $this->MultiCell($w[1],5,$row[1],'LR','C',$fill);
                 
    $X=$X+$w[1];
                 if(
    $this->GetY()>=$nuovaY){$nuovaY=$this->GetY();}
                 
    $this->SetY($Y);
                 
    $this->SetX($X);

                 
    $this->MultiCell($w[2],5,$row[2],'LR','L',$fill);
                 
    $X=$X+$w[2];
                 if(
    $this->GetY()>=$nuovaY){$nuovaY=$this->GetY();}
                 
    $this->SetY($Y);
                 
    $this->SetX($X); 
    mi sorge un problema:
    dato che utilizzo "LR" per ottenere i bordi, se è l'ultimo campo ad essere "riportato a capo" con MultiCell, chi può dirmi, per piacere come posso fare per far segnare i bordi anche delle celle precedenti?

    Spero di essere stato chiaro

    Grazie

  9. #9
    Utente di HTML.it L'avatar di otello
    Registrato dal
    May 2003
    Messaggi
    296
    Parzialmente risolto così:

    Codice PHP:
                 $h 5;
                 
    $nuovaY $this->GetY();
                 
    $Y $this->GetY();
                 
    $X $this->GetX();
                 
    $oldY   $Y;
                 
    $oldX   $X;

                 
    $this->MultiCell($w[0],$h,$row[0],'LR','C',$fill);
                 
    $X=$X+$w[0];
                 if(
    $this->GetY()>=$nuovaY){$nuovaY=$this->GetY();}
                 
    $this->SetY($Y);
                 
    $this->SetX($X);

                 
    $this->MultiCell($w[1],$h,$row[1],'LR','C',$fill);
                 
    $X=$X+$w[1];
                 if(
    $this->GetY()>=$nuovaY){$nuovaY=$this->GetY();}
                 
    $this->SetY($Y);
                 
    $this->SetX($X);

                 
    $this->MultiCell($w[2],$h,$row[2],'LR','L',$fill);
                 
    $X=$X+$w[2];
                 if(
    $this->GetY()>=$nuovaY){$nuovaY=$this->GetY();}
                 
    $this->SetY($Y);
                 
    $this->SetX($X);

                 
    $this->SetY($nuovaY);
                
                 
    $newY $nuovaY;
                 
    $linee = ($newY-$oldY)/$h;
                  if (
    $linee >)
                 {
                     
    $this->SetY($oldY);
                     
    $h=$h*$linee;
                     
    $this->Cell($w[0],$h,'','LR',0,'',$fill);
                     
    $this->Cell($w[1],$h,'','LR',0,'',$fill);
                     
    $this->Cell($w[2],$h,'','LR',0,'',$fill);
                      
    $this->Ln();
                 } 
    ma a parte che non mi piace come soluzione, il fatto è che così perdo lo sfondo perchè riscrivo brutalmente le celle precedenti con il bordo ed il fill=true mi sovrascrive il contenuto precedente delle celle.
    Nessuno sa suggerire una soluzione?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.