Italian [B4A] quale modulo / lib per creare un pdf ?

giannimaione

Well-Known Member
Licensed User
Longtime User
sono alla prese con la creazione di una app per un chromebook (è un tablet android con le vesti di un notebook !!!), e devo produrre dei report (pdf?) e successivamente stampare.
dopo le dovute ricerche sul forum, e NON avendo esperienza nella generazione di pdf, chiedo qualche suggerimento in merito.
grazieeee
 

Lello1964

Well-Known Member
Licensed User
Longtime User
Dovresti riuscire a utilizzare questo :

B4X:
Sub Process_Globals
    Dim pdf As PdfDocument
End Sub

Sub crea_pdf
    pdf.Initialize
    pdf.StartPage(595, 842) 'A4 size
    Pdf_righe=0
    Pdf_NumPagina=1
    Pdf_MaxRighe=45
    pdf_testa
    pdf_corpo
    pdf_piede
    pdf.FinishPage
    Dim out As OutputStream = File.OpenOutput(shared, "documento.pdf", False)
    pdf.WriteToStream(out)
    out.Close
    pdf.Close
End Sub

Sub pdf_testa
    pdf.Canvas.DrawRect( rettangolo(1,0,594,120), Colors.black,False,0dip)  
    pdf.Canvas.DrawText(Main.FlgIntesta1,10,20, Typeface.DEFAULT_BOLD, 12 / GetDeviceLayoutValues.Scale , Colors.RED, "LEFT")
    pdf.Canvas.DrawText(Main.FlgIntesta2,10,32, Typeface.DEFAULT, 10 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText(Main.FlgIntesta3,10,44, Typeface.DEFAULT, 10 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText(Main.FlgIntesta4,10,56, Typeface.DEFAULT, 10 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText(Main.FlgIntesta5,10,68, Typeface.DEFAULT, 10 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")  
    pdf.Canvas.DrawText("Spett.le",300,20, Typeface.DEFAULT_BOLD, 8 / GetDeviceLayoutValues.Scale , Colors.BLUE, "LEFT")
    pdf.Canvas.DrawText(lbl_Cliente.text,300,32, Typeface.DEFAULT, 10 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText(lbl_indirizzo.text,300,44, Typeface.DEFAULT, 10 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText(lbl_citta.text ,300,56, Typeface.DEFAULT, 10 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("P. Iva : " & Main.dbCurDocumenti.GetString("pariva") & " Cod. Fis.: " & Main.dbCurDocumenti.GetString("codfis")  ,300,68, Typeface.DEFAULT, 10 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("documento :" ,10,100, Typeface.DEFAULT , 10 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText(EmiDes_TipoDocumento ,80,100, Typeface.DEFAULT_BOLD,10 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("Numero Documento : " & Main.dbCurDocumenti.getint("numdoc") & "/ " & Main.dbCurDocumenti.GetString("alfadoc") & " del : " & Funzioni.DATAITALIANA(Main.dbCurDocumenti.GetString("datadoc")) ,300,100, Typeface.DEFAULT, 10 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("Pagamento : " & spn_PagamentoDoc.SelectedItem  & "                                                             Cod. Agente : " & Main.CodiceAgente ,10,115, Typeface.DEFAULT, 10 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("Pagina Numero : " & Pdf_NumPagina ,585,115, Typeface.DEFAULT, 10 / GetDeviceLayoutValues.Scale , Colors.Black, "RIGHT")
    pdf.Canvas.DrawRect(rettangolo(0,120,594,720), Colors.black,False,0dip)  
    pdf.Canvas.DrawText("Codice articolo"  ,12 ,130, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("Descrizione    "  ,185 ,130, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("Um"  ,350 ,130, Typeface.DEFAULT, 7 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("Q.tà "  ,380 ,130, Typeface.DEFAULT,7 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("Prezzo "  ,425 ,130, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("Sc. 1 "  ,475 ,130, Typeface.DEFAULT, 6 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("Sc. 2 "  ,495 ,130, Typeface.DEFAULT, 6/ GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("% Iva  "  ,517 ,130, Typeface.DEFAULT, 6 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("Imponibile"  ,545 ,130, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")  
    pdf.Canvas.DrawRect( rettangolo(1,120,594,135), Colors.black,False,1)  
    pdf.Canvas.DrawLine(85,120,85,720,Colors.black,0dip)
    pdf.Canvas.DrawLine(348,120,348,720,Colors.black,0dip)
    pdf.Canvas.DrawLine(368,120,368,720,Colors.black,0dip)
    pdf.Canvas.DrawLine(413,120,413,720,Colors.black,0dip)
    pdf.Canvas.DrawLine(473,120,473,720,Colors.black,0dip)
    pdf.Canvas.DrawLine(493,120,493,720,Colors.black,0dip)
    pdf.Canvas.DrawLine(515,120,515,720,Colors.black,0dip)
    pdf.Canvas.DrawLine(535,120,535,720,Colors.black,0dip)
End Sub

Sub pdf_corpo      
    Private tmpqta,tmpprezzo As Double
    pos=145
    For i=0 To curCorpoDoc.RowCount-1
        Pdf_righe=Pdf_righe+1
        If Pdf_righe>Pdf_MaxRighe Then
            pdf_piede_intermedio
            pdf.StartPage(595, 842) 'A4 size
            Pdf_righe=0
            Pdf_NumPagina=Pdf_NumPagina+1
            pdf_testa
            pos=145
        End If
        curCorpoDoc.Position =i
        tmpqta= curCorpoDoc.GetDouble("qta")
        tmpprezzo=curCorpoDoc.getdouble("prezzo")
        Dim tmpTotale As Double =curCorpoDoc.getdouble("totimponibile")
        pdf.Canvas.DrawText(curCorpoDoc.getstring("codicearticolo") ,2 ,pos, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
        pdf.Canvas.DrawText(curCorpoDoc.getstring("descrizione") ,87 ,pos, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
        pdf.Canvas.DrawText(curCorpoDoc.getstring("um") ,352 ,pos, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
        pdf.Canvas.DrawText(sf.Pad( Funzioni.NumberFormatPlus2(tmpqta,1,2,0,True).Replace(",","#").Replace(".",",").Replace("#",".")," ",9,False)  ,410 ,pos, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "RIGHT")
        pdf.Canvas.DrawText(sf.Pad( Funzioni.NumberFormatPlus2(tmpprezzo,1,5,2,True)," ",15,False).Replace(",","#").Replace(".",",").Replace("#",".")  ,470 ,pos, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "RIGHT")
        If curCorpoDoc.getdouble("sconto1")>0 Then
            pdf.Canvas.DrawText(sf.Pad( Funzioni.NumberFormatPlus2(curCorpoDoc.getdouble("sconto1"),1,5,0,False) ," ",7,False)  ,490 ,pos, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "RIGHT")
        End If
        If curCorpoDoc.getdouble("sconto2")>0 Then
            pdf.Canvas.DrawText(sf.Pad( Funzioni.NumberFormatPlus2(curCorpoDoc.getdouble("sconto2"),1,5,0,False) ," ",7,False)  ,513 ,pos, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "RIGHT")
        End If
        pdf.Canvas.DrawText(sf.Pad(curCorpoDoc.getint("cod_iva")," ",2,False) ,532,pos, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "RIGHT")
        pdf.Canvas.DrawText(sf.Pad(Funzioni.NumberFormatPlus2(tmpTotale,1,2,2,True).trim," ",18,False).Replace(",","#").Replace(".",",").Replace("#",".") ,590 ,pos, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "RIGHT")
        pos=pos+13
    Next  
End Sub

Sub pdf_piede  
    pdf.Canvas.DrawText("% Iva"  ,12 ,731, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("Imponibile"  ,55 ,731, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("Imposta"  ,125 ,731, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("Totale"  ,205 ,731, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")  
    pdf.Canvas.DrawLine(1,735,594,735,Colors.black,0dip)
    pdf.Canvas.DrawLine(40,722,40,840,Colors.black,0dip)
    pdf.Canvas.DrawLine(110,722,110,840,Colors.black,0dip)
    pdf.Canvas.DrawLine(180,722,180,840,Colors.black,0dip)
    pdf.Canvas.DrawLine(260,722,260,840,Colors.black,0dip)
    pos=745  
    For ali = 0 To TotDocCodIva.Size-1
        pdf.Canvas.DrawText( sf.Pad(Funzioni.NumberFormatPlus2(TotDocCodIva.get(ali),1,0,0,True)," ",5,False).Replace(",","#").Replace(".",",").Replace("#",".") ,35 ,pos, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "RIGHT")
        pdf.Canvas.DrawText( sf.Pad(Funzioni.NumberFormatPlus2(TotDocImponib .get(ali),1,2,2,True)," ",15,False).Replace(",","#").Replace(".",",").Replace("#",".") ,105 ,pos, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "RIGHT")
        pdf.Canvas.DrawText( sf.Pad(Funzioni.NumberFormatPlus2(TotDocImposta.get(ali),1,2,2,True)," ",17,False).Replace(",","#").Replace(".",",").Replace("#",".") ,175 ,pos, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "RIGHT")
        pdf.Canvas.DrawText( sf.Pad(Funzioni.NumberFormatPlus2(TotDocTotale.get(ali),1,2,2,True)," ",17,False).Replace(",","#").Replace(".",",").Replace("#",".") ,255 ,pos, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "RIGHT")
        pos=pos+13
    Next
    pdf.Canvas.DrawLine(260,770,594,770,Colors.black,0dip)  
    pdf.Canvas.DrawText("Totale Imponibile",285,745, Typeface.DEFAULT , 7/ GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("Totale Imposta",410,745, Typeface.DEFAULT, 7/ GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("Totale Documento",515,745, Typeface.DEFAULT_BOLD, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")

    pdf.Canvas.DrawText(sf.Pad(Funzioni.NumberFormatPlus2(TotaleImponibile,1,2,2,True)," ",10,False).Replace(",","#").Replace(".",",").Replace("#","."),345,765, Typeface.DEFAULT , 10 / GetDeviceLayoutValues.Scale , Colors.Black, "RIGHT")
    pdf.Canvas.DrawText(sf.Pad(Funzioni.NumberFormatPlus2(TotaleImposta,1,2,2,True)," ",10,False).Replace(",","#").Replace(".",",").Replace("#","."),465,765, Typeface.DEFAULT , 10 / GetDeviceLayoutValues.Scale , Colors.Black, "RIGHT")
    pdf.Canvas.DrawText(sf.Pad(Funzioni.NumberFormatPlus2(TotaleDocumento,1,2,2,True)," ",12,False).Replace(",","#").Replace(".",",").Replace("#","."),590,765, Typeface.DEFAULT_BOLD , 12 / GetDeviceLayoutValues.Scale , Colors.Black, "RIGHT")  
    pdf.Canvas.DrawLine(260,795,594,795,Colors.black,0dip)
    pdf.Canvas.DrawText("Totale a pagare",355,785, Typeface.DEFAULT, 7/ GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    TotaleSaldo   =TotaleDocumento-TotaleAcconto
    If Round2(TotaleAcconto,2)=Round2(TotaleDocumento,2) Then
        pdf.Canvas.DrawText("Incassato",265,785, Typeface.DEFAULT , 7/ GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
        pdf.Canvas.DrawText(sf.Pad(Funzioni.NumberFormatPlus2(TotaleAcconto,1,2,2,True)," ",10,False).Replace(",","#").Replace(".",",").Replace("#","."),340,787, Typeface.DEFAULT , 10 / GetDeviceLayoutValues.Scale , Colors.Blue, "RIGHT")
    Else
        pdf.Canvas.DrawText("Acconto",265,785, Typeface.DEFAULT , 7/ GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
        pdf.Canvas.DrawText(sf.Pad(Funzioni.NumberFormatPlus2(TotaleAcconto,1,2,2,True)," ",10,False).Replace(",","#").Replace(".",",").Replace("#","."),345,787, Typeface.DEFAULT , 10 / GetDeviceLayoutValues.Scale , Colors.Blue, "RIGHT")
        pdf.Canvas.DrawText(sf.Pad(Funzioni.NumberFormatPlus2(TotaleSaldo,1,2,2,True)," ",10,False).Replace(",","#").Replace(".",",").Replace("#","."),465,787, Typeface.DEFAULT , 10 / GetDeviceLayoutValues.Scale , Colors.red, "RIGHT")
    End If
    pdf.Canvas.DrawRect(rettangolo(0,722,594,840), Colors.black,False,0dip)
End Sub

Sub pdf_piede_intermedio  
    pdf.Canvas.DrawText("% Iva"  ,12 ,731, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("Imponibile"  ,55 ,731, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("Imposta"  ,125 ,731, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawText("Totale"  ,205 ,731, Typeface.DEFAULT, 8 / GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")  
    pdf.Canvas.DrawLine(1,735,594,735,Colors.black,0dip)
    pdf.Canvas.DrawLine(40,722,40,840,Colors.black,0dip)
    pdf.Canvas.DrawLine(110,722,110,840,Colors.black,0dip)
    pdf.Canvas.DrawLine(180,722,180,840,Colors.black,0dip)
    pdf.Canvas.DrawLine(260,722,260,840,Colors.black,0dip)
    pdf.Canvas.DrawLine(260,770,594,770,Colors.black,0dip)
    pdf.Canvas.DrawLine(260,795,594,795,Colors.black,0dip)
    pdf.Canvas.DrawText("Segue",480,755, Typeface.DEFAULT, 15/ GetDeviceLayoutValues.Scale , Colors.Black, "LEFT")
    pdf.Canvas.DrawRect(rettangolo(0,722,594,840), Colors.black,False,0dip)
    pdf.FinishPage
End Sub

Sub rettangolo(t As Int ,l As Int ,b As Int ,r As Int ) As Rect
    Dim rett As Rect
    rett.Initialize(t,l,b,r)
    Return rett
End Sub
 
Top