Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473

    FPDF Problema multicell

    Ciao a tutti...

    sto cercando di stampare una fattura in pdf usando il modulo FPDF di Baol...

    Per il dettaglio della fattura uso MultiCell e ho i seguenti campi:
    -codice
    -descrizione
    -prezzo unt.
    -sconto
    -prezzo scon.
    -qnt
    -totale

    tuttti questi campi stanno su una sola riga, tranne la descrizione che a volte è su piu righe...

    quando la descrizione è piu lunga il testo va capo correttamente, ingrandendo la cella della descrizione, pero le altre celle rimangono della altezza di una sola riga...

    Percio capita che ho la cella della descrizione piu grande delle altre, io vorrei che anche le altre celle si ingrandiscono in base alla descrizione...

    ecco il codice:

    codice:
    //DETTAGLIO FATTURA
    
    	var cn = new ActiveXObject("ADODB.Connection");
    	var strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = C:/Inetpub/wwwroot/mipson/public/mdb-database/db.mdb;Persist Security Info=False";
    	cn.Open(strConn);
    	var rs = new ActiveXObject("ADODB.Recordset");
    	//var SQL = "select cod_art, articolo, qnt, prezzo_listino, prezzo, tot, sconto from DETT_FATTURE, FATTURE WHERE n_fatt=160 AND DETT_FATTURE.n_fatt=FATTURE.id_fattura;";
    	var SQL = "SELECT DETT_FATTURE.cod_art, DETT_FATTURE.articolo, DETT_FATTURE.qnt, DETT_FATTURE.prezzo_listino, DETT_FATTURE.prezzo, DETT_FATTURE.tot, FATTURE.sconto FROM FATTURE, DETT_FATTURE WHERE (DETT_FATTURE.n_fatt=161) AND FATTURE.id_fattura = DETT_FATTURE.n_fatt;";
    	
    	rs.Open(SQL, cn);
    	
    	
    	x=pdf.GetX();
    	y=pdf.GetY();
    	pdf.SetFont('Arial','',10);
    	   
    	while(!rs.eof) {
    		cod_art=(rs(0));
    		articolo=(rs(1));
    		qnt=(rs(2));
    		prezzo_listino=(rs(3));
    		prezzo=(rs(4));
    		tot=(rs(5));
    		sconto=(rs(6));
    
    
    
    	pdf.SetY(y);
    	pdf.SetX(x);
    	x=pdf.GetX()+35;
    	y=pdf.GetY();
    
        pdf.MultiCell(35,5,cod_art,'B,L,T,R',0,'L',0);
    	pdf.SetY(y);
    	pdf.SetX(x);
    	x=pdf.GetX()+70;
    	y=pdf.GetY();
    
    	pdf.MultiCell(70,5,articolo,'B,L,T,R',0,'L',0);
    	pdf.SetY(y);
    	pdf.SetX(x);
    	x=pdf.GetX()+20;
    	y=pdf.GetY();
    
    	pdf.MultiCell(20,5,prezzo_listino,'B,L,T,R',0,'L',0);
    	pdf.SetY(y);
    	pdf.SetX(x);
    	x=pdf.GetX()+15;
    	y=pdf.GetY();
    	
    	pdf.MultiCell(15,5,sconto,'B,L,T,R',0,'L',0);
    	pdf.SetY(y);
    	pdf.SetX(x);
    	x=pdf.GetX()+20;
    	y=pdf.GetY();
    	
    	pdf.MultiCell(20,5,prezzo,'B,L,T,R',0,'L',0);
    	pdf.SetY(y);
    	pdf.SetX(x);
    	x=pdf.GetX()+10;
    	y=pdf.GetY();
    	
    	pdf.MultiCell(10,5,qnt,'B,L,T,R',0,'L',0);
    	pdf.SetY(y);
    	pdf.SetX(x);
    	x=pdf.GetX()+20;
    	y=pdf.GetY();
    	
    	pdf.MultiCell(20,5,tot,'B,L,T,R',0,'L',0);
    	y=y+5;
    	x=10;
    	pdf.SetY(y);
    
    	
    
    	rs.MoveNext()
    	}
    	
    	rs.Close();
    	cn.Close();
    Spero che abbiate capito il problema, è da ieri che sto lavorando su FPDF e non connetto più


    Grazie in anticipo


  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    nessuno riesce proprio ad aiutarmi???

  3. #3
    Ciao,
    devi recuperare la posizione iniziale e finale della multicella e poi stampare i bordi delle colonne dei campi non multicella... ti posto il codice che uso io, spero ti possa servire:

    Codice PHP:
        Function Corpo()
            
            
    'INIZIO LOOP RIGHE FATTURA
            Do While Not RSriga.EOF
            
                '    
    ###    SEGNO    #######
                
    If RSriga("fttr_segno") = 0 Then
                    Segno 
    ""
                    
    pdf.SetTextColor 0,0,0
                
    Else
                    
    Segno "- "
                    
    pdf.SetTextColor 255,0,0
                End 
    If
            
                
    'codice
                If RSriga("fttr_id_prodotto") > 0 Then
                    If Len(RSriga("fttr_id_prodotto")) < 5 Then
                        pdf.Cell 10,6,String(5 - Len(RSriga("fttr_id_prodotto")), chr(160)) & RSriga("fttr_id_prodotto"),"L",0
                    Else
                        pdf.Cell 10,6,RSriga("fttr_id_prodotto"),"L",0
                    End If
                Else
                    pdf.Cell 10,6,"","L",0
                End If
                
                '
    quantità
                
    If RSriga("fttr_qtt") > AND VediTesto(RSriga("fttr_dsc")) <> "SCONTO" AND VediTesto(RSriga("fttr_dsc")) <> "SPESE SPEDIZIONE" Then
                    pdf
    .Cell 10,6,String(Len(FormatNumber(RSriga("fttr_qtt"), 0)), chr(160)) & FormatNumber(RSriga("fttr_qtt"), 0),"L",0
                
    Else
                    
    pdf.Cell 10,6,"","L",0
                End 
    If
            
                
    'x e y recupero la posizione iniziale della multicella
                x=pdf.GetX() 
                y=pdf.GetY() 
                w = 127 
                
                '
    descrizione
                
    If Len(VediTestoPDF(RSriga("fttr_dsc"))) > 73 Then
                    pdf
    .MultiCell w,6,Mid(VediTestoPDF(RSriga("fttr_dsc")), 170) & "...","LR","J"
                
    Else
                    
    pdf.MultiCell w,6,VediTestoPDF(RSriga("fttr_dsc")),"LR","J"
                
    End If
                
                
    'y2 recupero la posizione finale della multicella
                y2=pdf.GetY() 
                
                '
    stampo una serie di righe vuote solo con il bordo sinistro sotto a n°    SOLO SE USATA MULTICELLA
                
    If y+y2 Then
                    
    For ix y To y2-6 Step 6
                        pdf
    .SetXY x-15,ix
                        pdf
    .Cell 15,6,"","L",0
                    Next
                End 
    If
                
                
    'stampo una serie di righe vuote solo con i bordi fino alla fine della scritta nella multicella 
                '
    (y2-[-6 perchè è l'altezza della linea])
                If y+6 < y2 Then
                    For ix = y To y2-6 Step 6
                        pdf.SetXY x+w,ix
                        pdf.Cell 17,6,"","R",0
                        pdf.Cell 8,6,"","R",0
                        pdf.Cell 18,6,"","R",1
                    Next
                End If
                
                '
    imposto la posizione finale della multicella (-6 per tornare allineato all'ultima riga della multicella
                pdf.SetXY x+w,y2-6
            
                '
    Importo
                
    If RSriga("fttr_imp") <> 0 Then
                    pdf
    .Cell 17,6,String(Len(FormatNumber(VisualizzaPrezzo(RSriga("fttr_imp")), 2,,,-1) & Segno), chr(160)) & Segno FormatNumber(VisualizzaPrezzo(RSriga("fttr_imp")), 2,,,-1),"R",0
                
    Else
                    
    pdf.Cell 1,6,"(","L",0
                    pdf
    .SetTextColor 255,0,0
                    pdf
    .Cell 1,6,"*","",0
                    pdf
    .SetTextColor 0,0,0
                    pdf
    .Cell 1,6,")","",0
                    pdf
    .Cell 14,6,"0","R",0,"R"
                    
    Asterisco "S"
                
    End If
                
                
    '% IVA
                If RSriga("fttr_imp") <> 0 Then
                    pdf.Cell 8,6," " & PercIvaVendita,"R",0
                Else
                    pdf.Cell 8,6,"  0","R",0
                End If
                
                '
    imponibile
                
    If RSriga("fttr_imp_tt") <> 0 Then
                    pdf
    .Cell 18,6,String(Len(FormatNumber(VisualizzaPrezzo(RSriga("fttr_imp_tt")), 2,,,-1) & Segno), chr(160)) & Segno FormatNumber(VisualizzaPrezzo(RSriga("fttr_imp_tt")), 2,,,-1),"R",1
                
    Else
                    
    pdf.Cell 18,6,String(8chr(160)) & "0","R",1
                End 
    If
                
                
    'dimonuisco di 1 il numero delle righe
                NumeroRigheFattura = NumeroRigheFattura - 1
                
                '
    verifico se fare il saltopagina
                y
    =pdf.GetY() 
                
                
                If (
    230 AND NumeroRigheFattura AND Asterisco "") OR _
                    
    (224 AND NumeroRigheFattura AND Asterisco "S"Then
                    
                    NumeroPagina 
    NumeroPagina 1
                    SaltoPagina
    ()
                    
    Testa()
                    
                
    End If

              
    RSriga.MoveNext
            Loop

            Totali Asterisco
            
        End 
    Function 
    fulvio

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    Grazie fulvio, mi hai illuminato, ora ho risolto il problema, sbagliavo a ritrovarmi la y facevo prima un SetY anziche GetY e di conseguenza aveva la stessa altezza....

    Ora il problema è risolto, ci sarebbe ancora una piccola cosa, ossia il mio primo campo è un codice e quello rimane sempre su una sola riga, perche il campo su piu righe è quello subito dopo, per risolvere il problema devo invertire i due campi
    oppure ce qualche altro trucchetto che non so???

    ecco il codice:


    codice:
    //DETTAGLIO FATTURA
    
    	var cn = new ActiveXObject("ADODB.Connection");
    	var strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = C:/Inetpub/wwwroot/mipson/public/mdb-database/db.mdb;Persist Security Info=False";
    	cn.Open(strConn);
    	var rs = new ActiveXObject("ADODB.Recordset");
    	
    	var SQL = "SELECT DETT_FATTURE.cod_art, DETT_FATTURE.articolo, DETT_FATTURE.qnt, DETT_FATTURE.prezzo_listino, DETT_FATTURE.prezzo, DETT_FATTURE.tot, FATTURE.sconto FROM FATTURE, DETT_FATTURE WHERE (DETT_FATTURE.n_fatt=161) AND FATTURE.id_fattura = DETT_FATTURE.n_fatt;";
    	
    	rs.Open(SQL, cn);
    	
    	
    	x=pdf.GetX();
    	y=pdf.GetY();
    	pdf.SetFont('Arial','',10);
    	   
    	while(!rs.eof) {
    		cod_art=(rs(0));
    		articolo=(rs(1));
    		qnt=(rs(2));
    		prezzo_listino=(rs(3));
    		prezzo=(rs(4));
    		tot=(rs(5));
    		sconto=(rs(6));
    
    
    	pdf.SetY(y);
    	pdf.SetX(x);
    	x=pdf.GetX()+35;
    	y=pdf.GetY();
    
        pdf.MultiCell(35,5,cod_art,'B,L,T,R',0,'L',0);
    	pdf.SetY(y);
    	pdf.SetX(x);
    	x=pdf.GetX()+70;
    	
    
    	pdf.MultiCell(70,5,articolo+y,'B,L,T,R',0,'L',0);
    	y2=pdf.GetY();
    	y_old=y;
    	diff_y=y2-y_old;
    	pdf.SetY(y);
    	pdf.SetX(x);
    	x=pdf.GetX()+20;
    	
    	pdf.Cell(20,diff_y,prezzo_listino,'B,L,T,R',0,'L',0);
    	y2=pdf.GetY();
    	y_old=y;
    	
    	if (y2>y_old)
    	{
    		diff_y=y2-y_old;
    	}
    	
    	pdf.SetY(y);
    	pdf.SetX(x);
    	x=pdf.GetX()+15;
    	
    	pdf.MultiCell(15,diff_y,sconto,'B,L,T,R',0,'L',0);
    	y2=pdf.GetY();
    	y_old=y;
    	
    	if (y2>y_old)
    	{
    		diff_y=y2-y_old;
    	}
    	
    	pdf.SetY(y);
    	pdf.SetX(x);
    	x=pdf.GetX()+20;
    	
    	pdf.MultiCell(20,diff_y,prezzo,'B,L,T,R',0,'L',0);
    	y2=pdf.GetY();
    	y_old=y;
    	
    	if (y2>y_old)
    	{
    		diff_y=y2-y_old;
    	}
    	
    	pdf.SetY(y);
    	pdf.SetX(x);
    	x=pdf.GetX()+10;
    	
    	pdf.MultiCell(10,diff_y,qnt,'B,L,T,R',0,'L',0);
    	y2=pdf.GetY();
    	y_old=y;
    	
    	if (y2>y_old)
    	{
    		diff_y=y2-y_old;
    	}
    	
    	pdf.SetY(y);
    	pdf.SetX(x);
    	x=pdf.GetX()+20;
    	
    	pdf.MultiCell(20,diff_y,tot,'B,L,T,R',0,'L',0);
    	y=y+diff_y;
    	x=10;
    	pdf.SetY(y);
    
    	
    
    	rs.MoveNext()
    	}
    	
    	rs.Close();
    	cn.Close();


  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    Ho risolto anche il campo del codice...

    in poche parole, creo la cella del codice con il bordo superiore sinistro e destro e non stampo il codice, poi creo tutta la mia riga e in fondo come ultima istruzione mi ricreo il campo codice con l'altezza che mi sono trovato dei campi successi, il bordo inferiore destro e sinistro e stampo il valore del codice...

    Ora posso dire di aver finito il report della fattura, è da lunedì che ci lavoro!!!!


    un ultimo problemino è che non mi centra i testi anche se metto C, ma non importa lo lascio cosi che va bene lo stesso!!!! Grazie Fulvio e grazie Baol per aver creato FPDF per asp!!!!

    Vi posto il codice finale!!!

    codice:
    //DETTAGLIO FATTURA
    
    	var cn = new ActiveXObject("ADODB.Connection");
    	var strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = C:/Inetpub/wwwroot/mipson/public/mdb-database/db.mdb;Persist Security Info=False";
    	cn.Open(strConn);
    	var rs = new ActiveXObject("ADODB.Recordset");
    	
    	var SQL = "SELECT DETT_FATTURE.cod_art, DETT_FATTURE.articolo, DETT_FATTURE.qnt, DETT_FATTURE.prezzo_listino, DETT_FATTURE.prezzo, DETT_FATTURE.tot, FATTURE.sconto FROM FATTURE, DETT_FATTURE WHERE (DETT_FATTURE.n_fatt=161) AND FATTURE.id_fattura = DETT_FATTURE.n_fatt;";
    	
    	rs.Open(SQL, cn);
    	
    	
    	x=pdf.GetX();
    	y=pdf.GetY();
    	pdf.SetFont('Arial','',10);
    	   
    	while(!rs.eof) {
    		cod_art=(rs(0));
    		articolo=(rs(1));
    		qnt=(rs(2));
    		prezzo_listino=(rs(3));
    		prezzo=(rs(4));
    		tot=(rs(5));
    		sconto=(rs(6));
    
    
    	pdf.SetY(y);
    	pdf.SetX(10);
    	//x=pdf.GetX()+35;
    	y=pdf.GetY();
    
        pdf.MultiCell(35,5,'','L,T,R',0,'L',0);
    	pdf.SetY(y);
    	pdf.SetX(45);
    	//x=pdf.GetX()+70;
    	
    
    	pdf.MultiCell(70,5,articolo,'B,L,T,R',0,'L',0);
    	y2=pdf.GetY();
    	y_old=y;
    	diff_y=y2-y_old;
    	pdf.SetY(y);
    	pdf.SetX(115);
    	//x=pdf.GetX()+20;
    	
    	pdf.Cell(20,diff_y,prezzo_listino,'B,L,T,R',0,'L',0);
    	y2=pdf.GetY();
    	y_old=y;
    	
    	if (y2>y_old)
    	{
    		diff_y=y2-y_old;
    	}
    	
    	pdf.SetY(y);
    	pdf.SetX(135);
    	//x=pdf.GetX()+15;
    	
    	pdf.MultiCell(15,diff_y,sconto,'B,L,T,R',0,'L',0);
    	y2=pdf.GetY();
    	y_old=y;
    	
    	if (y2>y_old)
    	{
    		diff_y=y2-y_old;
    	}
    	
    	pdf.SetY(y);
    	pdf.SetX(150);
    	//x=pdf.GetX()+20;
    	
    	pdf.MultiCell(20,diff_y,prezzo,'B,L,T,R',0,'L',0);
    	y2=pdf.GetY();
    	y_old=y;
    	
    	if (y2>y_old)
    	{
    		diff_y=y2-y_old;
    	}
    	
    	pdf.SetY(y);
    	pdf.SetX(170);
    	//x=pdf.GetX()+10;
    	
    	pdf.MultiCell(10,diff_y,qnt,'B,L,T,R',0,'L',0);
    	y2=pdf.GetY();
    	y_old=y;
    	
    	if (y2>y_old)
    	{
    		diff_y=y2-y_old;
    	}
    	
    	pdf.SetY(y);
    	pdf.SetX(180);
    	//x=pdf.GetX()+20;
    	
    	pdf.MultiCell(20,diff_y,tot,'B,L,T,R',0,'L',0);
    	
    	pdf.SetY(y);
    	pdf.SetX(10);
    	pdf.MultiCell(35,diff_y,cod_art,'B,L,R',0,'L',0);
    	
    	
    	y=y+diff_y;
    	x=10;
    
    	
    
    	rs.MoveNext()
    	}
    	
    	rs.Close();
    	cn.Close();


    Androita

  6. #6

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.