• User

    Creare Modello Fattura + FPDF

    Ciao a tutti non so proprio da dove iniziare:

    Devo creare una fattura del seguente tipo con FPDF però non ho nessuna idea su come farla. Mi aiutate per favore?.

    Estrarre i dati da asp per popolare la fattura lo so fare però il problema è scrivere il PDF con i campi della fattura. Grazie.

    Vi allego il modello di fattura che devo realizzare.


  • User Newbie

    Ciao, ho trovato il tuo post cercando aiuti su FPDF, se ti serve ancora ti posto come ho realizzato io la mia fattura:

    Nella cartella fpdf/models/ ho creato il file Fattura.mod (con blok notes):

    
    this.Header=function Header()
    {
    this.Image('images/### nome immagine ###.JPG',10,8,45);
    this.SetFont('Arial','B',20);
    this.SetTextColor(43,134,43);
    this.Ln(5);
    this.Cell(80);
    this.Cell(0,8,'### nome ditta ###',0,1,'L');
    this.SetDrawColor(43,134,43);
    this.Line(90,23,200,23);
    this.SetFont('Arial','',10);
    this.SetTextColor(179,181,179);
    this.Cell(0,6,'### sottotitolo nome ditta ###',0,1,'R');
    this.Ln(3);
    this.SetFont('Arial','',12);
    this.Cell(0,5,'### indirizzo ###',0,1,'R');
    this.Cell(0,5,'### telefono ###',0,1,'R');
    this.Cell(0,5,'### P.IVA / C.F. ###',0,1,'R');
    this.SetTextColor(0,0,0);
    this.Ln(5);
    } 
    this.Footer=function Footer()
    {
    this.SetY(-12);
    this.SetFont('Arial','',8);
    this.SetTextColor(50,32,210);
    this.Cell(20,5,'fattura generata in automatico da ### nome applicazione ###',0,0,'L');
    this.SetFont('Arial','I',8);
    this.SetTextColor(0,0,0);
    this.Cell(80,5,'Page '+ this.PageNo()+ '/{nb}',0,0,'R');
    this.Cell(90,5,'S. E. & O.',0,1,'R');
     
    }
     
    
    

    questo invece il file che genera la fattura:

    
    <!--#include file="fpdf.asp"-->
    <!--#include file="### connessione al database ###"-->
    <%
    ' ###   qua tutte le query necessarie   ###
    Dim i, pdf
     
    Set pdf=CreateJsObject("FPDF")
    pdf.CreatePDF()
    pdf.SetPath("fpdf/")
    pdf.Open()
    pdf.LoadModels("Fattura")    '  il nome del modello (mod) è specificato senza estensione.
    pdf.AddPage()
    'impostazione dati visibili nelle proprietà del documento una volta salvato
    pdf.SetAuthor "### autore ###"     ' autore, và nelle proprietà
    pdf.SetCreator "### applicazione ###"   ' applicazione che ha generato il documento (Gestione fatture")
    pdf.SetSubject "Fattura n° "& RSfatt("ftt_numero") & "/" & Mid(RSfatt("ftt_data"), 3, 2) ' oggetto del documento
    pdf.SetTitle "Fattura"    ' titolo del documento
    pdf.SetCreationDate Now()   ' data creazione del documento (puoi inserire anche l'ora)
    pdf.SetDisplayMode "real"   ' modalità di apertura del documento (real = 100%)
    pdf.SetTextColor 0,0,0
    '  inserimento N° scontrino se esistente
    If RSfatt("ftt_scontrino_num") <> "" AND Len(RSfatt("ftt_scontrino_data")) = 8 Then
     pdf.SetFont "Arial","B",10
     
     pdf.Cell 25,6,"Scontrino N°",0,0,"L"
     ' campo numero scontrino
     pdf.Cell 15,6, RSfatt("ftt_scontrino_num"),0,0,"L",0
     
     pdf.Cell 8,6,"del",0,0,"L"
     
     ' data scontrino
     pdf.Cell 10,6,StrToData(RSfatt("ftt_scontrino_data")),0,0,"L",0
     pdf.Cell 23
    Else
     pdf.Cell 80
    End If
    pdf.SetFont "Arial","B",12
    pdf.Cell 35,6,"Fattura N°",0,0,"R"
    ' colore di sfondo della cella
    pdf.SetFillColor 255,204,1
    ' campo numero fattura
    pdf.Cell 25,6, RSfatt("ftt_numero") & "/" & Mid(RSfatt("ftt_data"), 3, 2),1,0,"R",1
    pdf.Cell 20,6,"del",0,0,"R"
    ' data fattura
    pdf.Cell 30,6,StrToData(RSfatt("ftt_data")),1,0,"R",1 ' inserire campo data fattura
    pdf.Ln(15) 
    pdf.SetTextColor 0,0,0
    pdf.SetFont "Arial","B",12
    pdf.Cell 93,5,"",0,0
    pdf.Cell 92,5,"Spett.le",0,1
    pdf.SetTextColor 0,0,0
    'recupero le coordinate correnti
    x=pdf.GetX() 
    y=pdf.GetY() 
    pdf.Cell 93,5,"",0,1
    'imposto la nuova coordinata per la seconda multicella
    pdf.SetXY x+93,y
    'colore testo nero
    pdf.SetTextColor 0,0,0
    pdf.MultiCell 97,6,VediTesto(RScli("cli_nome")),0
    pdf.Ln(6) 
    pdf.Cell 30,5,"P. IVA - C.F. " & "",0  
    pdf.Cell 50,5,VediTesto(RScli("cli_piva")),0,1 ' campo P.IVA o C.F.
    'preparo la stringa del pagamento
    If RSfatt("ftt_pagata") = 2 Then 
     StrPagamento = "Effettuato con "
    ElseIf RSfatt("ftt_pagata") = 1 Then 
     StrPagamento = "Acconto "& VisualizzaPrezzo(RSfatt("ftt_acconto")) &" ? con "
    ElseIf RSfatt("ftt_pagata") = 0 Then 
     StrPagamento = ""
    End If
    StrPagamento = StrPagamento & LCase(VediTesto(RSpaga("pag_tipo")))
    pdf.Cell 30,5,"Pagamento:",0
    pdf.Cell 160,5,StrPagamento,0,1 ' campo pagamento
    pdf.Ln(4) 
    'colore di sfondo della cella
    pdf.SetFillColor 193,193,193
    pdf.SetTextColor 0,0,0
    pdf.SetFont "Arial","B",10
    pdf.Cell 15,6,"Numero",1,0,"",1
    pdf.Cell 120,6,"Descrizione",1,0,"",1
    pdf.Cell 20,6,"Importo",1,0,"C",1
    pdf.Cell 15,6,"% IVA",1,0,"C",1
    pdf.Cell 20,6,"Imponibile",1,1,"C",1
    pdf.SetFillColor 0,0,0
    pdf.Cell 15,6,"","LR",0
    pdf.Cell 120,6,"","R",0
    pdf.Cell 20,6,"","R",0
    pdf.Cell 15,6,"","R",0
    pdf.Cell 20,6,"","R",1
    'imposto carattere proporzionale
    pdf.SetFont "Courier","",8
    '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
     pdf.Cell 3,6,"n°","L",0
     
     'quantità
     pdf.Cell 12,6,String(6 - Len(FormatNumber(RSriga("fttr_qtt"), 0)), chr(160)) & FormatNumber(RSriga("fttr_qtt"), 0),0
     
     'x e y recupero la posizione iniziale della multicella
     x=pdf.GetX() 
     y=pdf.GetY() 
     w = 120 
     
     'descrizione
     pdf.MultiCell w,6,VediTesto(RSriga("fttr_dsc")),"LR","J"
     
     '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+6 < 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 [-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 20,6,"","R",0
       pdf.Cell 15,6,"","R",0
       pdf.Cell 20,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  Len(Segno) + 
     pdf.Cell 20,6,String(10 - Len(FormatNumber(VisualizzaPrezzo(RSriga("fttr_imp")), 2,,,-1) & Segno), chr(160)) & Segno & FormatNumber(VisualizzaPrezzo(RSriga("fttr_imp")), 2,,,-1),"R",0
     
     '% IVA
     pdf.Cell 15,6,String(5 - Len(RSriga("fttr_iva")), chr(160)) & RSriga("fttr_iva"),"R",0
     
     'imponibile
     pdf.Cell 20,6,String(10 - Len(FormatNumber(VisualizzaPrezzo(RSriga("fttr_imp_tt")), 2,,,-1) & Segno), chr(160)) & Segno & FormatNumber(VisualizzaPrezzo(RSriga("fttr_imp_tt")), 2,,,-1),"R",1
     
     'FINE LOOP RIGHE
      RSriga.MoveNext
    Loop
    'se non ci sono più righe da stampare riempio con celle che creano solo i bordi:
    y=pdf.GetY()  ' recupero il valore di Y corrente
    For ix = y To 260.00125 Step 6
     pdf.Cell 15,6,"","LR",0
     pdf.Cell 120,6,"","R"
     pdf.Cell 20,6,"","R",0
     pdf.Cell 15,6,"","R",0
     pdf.Cell 20,6,"","R",1
    Next
    pdf.SetTextColor 0,0,0
    pdf.Cell 150,6,"Imponibile ","LT",0,"R"
    pdf.Cell 5,6,"?","T"
    pdf.Cell 35,6,String(19 - Len(FormatNumber(VisualizzaPrezzo(RSfatt("ftt_imp")), 2,,,-1)), chr(160)) & FormatNumber(VisualizzaPrezzo(RSfatt("ftt_imp")), 2,,,-1),"TR",1        ' campo imponibile
    pdf.Cell 150,6,"I.V.A. 20% ","L",0,"R"
    pdf.Cell 5,6,"?"
    pdf.Cell 35,6,String(19 - Len(FormatNumber(VisualizzaPrezzo(RSfatt("ftt_iva")), 2,,,-1)), chr(160)) & FormatNumber(VisualizzaPrezzo(RSfatt("ftt_iva")), 2,,,-1),"R",1         ' campo IVA
    pdf.SetFont "Courier","B",12
    pdf.Cell 150,6,"Totale fattura ","LTB",0,"R"
    'colore di sfondo della cella
    pdf.SetFillColor 255,204,1
    pdf.Cell 5,6,"?","LTB",0,"L",1
    pdf.Cell 35,6,String(18 - Len(FormatNumber(VisualizzaPrezzo(RSfatt("ftt_tot")), 2,,,-1)), chr(160)) & FormatNumber(VisualizzaPrezzo(RSfatt("ftt_tot")), 2,,,-1),"TRBR",0,"R",1       ' campo totale fattura
    pdf.Close()
    'salvo la fattura
    NomeFile = String(5 - Len(RSfatt("ftt_numero")), "0") & RSfatt("ftt_numero") & "_" & Mid(RSfatt("ftt_data"), 3, 2) & ".pdf"
    reportPath = server.mapPath(PathFattCli & NomeFile) ' ### PathFattCli = cartella con permessi di scrittura nella forma (esempio) "/Public/fatture_cli/"
    x = pdf.Output(reportPath,"F",true)
     
    'se in Q.S. è passato invia = s invio il file come allegato mail SOLO SE il cliente ha un indirizzo mail valido
    If (Request("invia") = "s" OR aggiorna = "s") AND (VediTesto(RScli("cli_mail1")) <> "") Then
     
     InvioMailHTMLAllegato MailAdmin, VediTesto(RScli("cli_mail1")), "Invio fattura", "<font face='Trebuchet MS' size='2'>Allegata fattura.<br /><br />Lo scontrino fiscale da allegare alla fattura, ed indicato nella fattura, lo trovate insieme al materiale ordinato.<br /><br />Ai sensi dell'Art.21 DPR 633/1972 ed interpretazioni di cui alle RM571134/1988. RM450217/1990. RM451163/1990. RM132/E/1997 e RM107/E/2001, si trasmette fattura tramite e-mail che si considera quindi emessa e spedita in originale.<br /><br />Sarà vostra cura la stampa su supporto cartaceo (risoluzione del 04/07/2001 n. 107).</font><br /><br />"& FirmaMail, PathFattCli & NomeFile
     
    End If
    'in ogni caso mi invio una copia della fattura
    InvioMailHTMLAllegato MailAdmin, MailAdmin, "Invio fattura "& RSfatt("ftt_numero") & "/" & Mid(RSfatt("ftt_data"), 3, 2), "<font face='Trebuchet MS' size='2'>Allegata fattura "& RSfatt("ftt_numero") & "/" & Mid(RSfatt("ftt_data"), 3, 2) &"</font>", PathFattCli & NomeFile
    ' visualizzo la fattura
    pdf.Output()
     
    Set pdf = Nothing
    %>
     
    
    

    non ho implementato il salto pagina perchè le mie fatture sono sempre piccole :bho:

    dove trovi ### devi inserire i tuoi dati

    ciao, fulvio