Italian PDFDocument aggiunta Campo Memo

Discussion in 'Italian Forum' started by Gianni Sassanelli, Aug 14, 2018.

  1. Gianni Sassanelli

    Gianni Sassanelli Member Licensed User

    Buongiorno a tutti,
    sto utilizzando la libreria PDFDocument per creare un PDF

    Ho un problema sul render dei campi memo che ottengo con il codice seguente.

    Ho chiesto aiuto per cambiare il TYPEFACE sui campi memo ed Erel mi ha risposto che devo usare il canvas vedendo un esempio nel seguente link
    https://www.b4x.com/android/forum/threads/wordwrap-to-a-canvas.71712/#post-456049

    Purtroppo non riesco a capire come fare.
    qualcuno può aiutarmi per favore?


    Code:
    Sub MakePDF
        
    Dim PDF1                     As PDFDocument
        
    Dim PDF_PAGEINFO      As PageInfo   
        
    Dim PDF_RECT            As Rect
        
    Dim ptLeft, ptwidth     As Int
        
    Dim ptTop, ptHeight    As Int
        
    Dim Fsize                 As Int
        ptLeft     = 
    5
        ptTop     = 
    5
        ptwidth  = 
    200
        ptHeight  = 
    50
        Fsize     = 
    10 / GetDeviceLayoutValues.Scale
        
        PDF_RECT.Initialize(
    10,10,595-20,842-20'bordo di 10
        PDF_PAGEINFO.Initialize(595,842,1,PDF_RECT)
        
    Dim PDF_Page As Page = PDF1.startPage(PDF_PAGEINFO)
        
    Dim Txtmemo As String
        Txtmemo = 
    $"
            Questo è un esempio di stringa multi riga
                ${
    DateTime.Date(DateTime.Now)} ${DateTime.Time(DateTime.Now)}
            ----------------------------------------------
            Riga 1
            Riga 2
            Riga 3
            ==============================================
            Fine"$
       
        
    Dim PDF_TextRec     As TextRec
        PDF_TextRec.Initialize(Txtmemo,ptwidth,
    822,ptHeight,Colors.DarkGray)
        
    'I NEED HERE to USE a MY Typeface for TextRec Object
        ' IS this possible??
        
        PDF_TextRec.draw(PDF_Page,
    0,0)
        PDF1.finishPage(PDF_Page)
        PDF1.writeTo(
    File.DirRootExternal,"TestPdfDocument.pdf")
    End Sub
     
  2. IlCasti

    IlCasti Active Member Licensed User

    Ciao
    Spero di darti una mano...
    Sicuramente poi gente più brava verrà in nostro soccorso, vero Mario? :D


    Code:
    'Questa sub ti serve per disegnare la canvas e la piazzi al di fuori della creazione del Pdf
    Sub DrawView (cvs As Canvas, v As View)
       
    Dim cjo As JavaObject = cvs
       
    Dim jv As JavaObject = v
       jv.RunMethod(
    "draw"Array(cjo.GetFieldJO("canvas")))
    End Sub



    'Questo lo metti dove commenti il tuo codice per il typeface
    Dim MioFont As Typeface
    MioFont = 
    Typeface.LoadFromAssets("MioFont.ttf"'Ci metti il font che carichi dall'asset
    EditTesto.Typeface = MioFont

    'Edit (Mancava la dim dell'edittext)
    Dim EditTesto As EditText
    EditTesto.Initialize(
    "")
    EditTesto.SingleLine=
    False
    EditTesto.Text=
    "Testo"&CRLF&"PDF"&CRLF&"Multilinea per Canvas View"

    'Disegni il canvas
    Dim c As Canvas
    c.Initialize(
    Activity)
    DrawView(c, EditTesto)
    Ciao
     
    Last edited: Aug 14, 2018
    LucaMs likes this.
  3. LucaMs

    LucaMs Expert Licensed User

    Falsissimo; sia perchè non sono affatto più bravo in generale, sia perché nello specifico ho creato mezzo pdf in tutta la mia (brevissima :p) vita.
     
    IlCasti likes this.
  4. IlCasti

    IlCasti Active Member Licensed User

    Hai "ragionissima"! Ho menzionato il vocabolo sbagliato... "Esperto" :p
    Quindi tieniti pronto ad aiutarci ;)
     
    LucaMs likes this.
  5. Gianni Sassanelli

    Gianni Sassanelli Member Licensed User

    Ciao IlCasti, e Lucas
    anzitutto buon Ferragosto.

    Purtroppo il codice non funziona essenzialmente io credo per questi motivi.

    1) mi sembra che la editText deve essere aggiunta alla View( activity, panel ecc) prima di essere inserita nel canvas
    2) non so come posizionare la canvas, dove voglio io non trovo metodi move top ecc
    3) ammesso che riesca a gestire la canvas, non capisco come usare questo codice nella creazione del pdf.
     
  6. LucaMs

    LucaMs Expert Licensed User

    Ciao e buona festa anche a te.

    Come detto, ne so ben... niente (in passato, anni fa feci qualcosa ma la mia memoria arriva al massimo a... 10 minuti fa :D:().

    Mi indichi con precisione (link) la libreria per il pdf che hai usato? Magari faccio qualche provola.
     
  7. LucaMs

    LucaMs Expert Licensed User

  8. Gianni Sassanelli

    Gianni Sassanelli Member Licensed User

  9. LucaMs

    LucaMs Expert Licensed User

    Il secondo link è sbagliato.
     
  10. LucaMs

    LucaMs Expert Licensed User

    Cmq, per me adesso non è il momento di ragionare troppo.

    Dal primo link che hai postato:

    pdf.Canvas.DrawText("Hello", 100, 100, Typeface.DEFAULT_BOLD, 30 / GetDeviceLayoutValues.Scale , Colors.Yellow, "CENTER")

    Qui nessuno ti obbliga ad usare Typeface.DEFAULT_BOLD.
    In generale (quindi non mi riferisco ai pdf) puoi cambiare font in questo modo:

    Code:
    ' Process_Globals
    Private default_font, default_font_bold, default_font_italic As Typeface 'ignore

    SetFont(FontFileName) 
    ' <--- qui chiaramente devi mettere il nome del file del tuo font

    Private Sub SetFont(FontFileName As String)
       default_font = 
    Typeface.LoadFromAssets(FontFileName) 'ignore
       default_font_bold =   Typeface.CreateNew(default_font, default_font.STYLE_BOLD)
       default_font_italic = 
    Typeface.CreateNew(default_font, default_font.STYLE_ITALIC)
    End Sub

    Volendo impostare il font per una Label o EditText:
    Code:
    Public Sub SetViewTextFont(Vw As View, FontFileName As String)
       
    If Vw Is Label Then
           SetFont(FontFileName)
           
    Dim lbl As Label = Vw
           lbl.Typeface = default_font
       
    Else if Vw Is EditText Then
           SetFont(FontFileName)
           
    Dim et As EditText = Vw
           et.Typeface = default_font
       
    Else
           
    Log("SetViewTextFont - not a valid view. Pass labels or edittexts")
       
    End If
    End Sub
     
  11. Gianni Sassanelli

    Gianni Sassanelli Member Licensed User

    Si Lucas,
    tutto quello che hai detto è assolutamente vero.
    il link sbagliato è questo:
    https://www.b4x.com/android/forum/t...g-android-jar-built-in-methods.74830/#content

    Il mio problema sta nelle stringhe multi riga per esempio un campo memo di un database oppure come quella riportata sotto
    in questo caso ho usato il TextRect preso dall'esempio di DonManfred ma purtroppo su quest'ultimo non riesco a settare la typeface

    Code:
    Dim mlStr as String =$"
    Riga 1
                                                           Riga 2
          Riga 3
    =============================================
    "$
    La mia idea sarebbe quella di visualizzare tutti gli oggetti nella page, prendere l'oggetto ed in java impostargli la typeface ma non ho le conoscenze per fare questo
    oppure mi hanno suggerito di usare un canvas, ma non riesco a capire come
     
  12. LucaMs

    LucaMs Expert Licensed User

    Ma non stai usando la libreria pubblicata da Erel? Questo mi pare d'aver capito e comunque te lo consiglio, visto che DonManfred non aggiornerà la sua, avendo perso il sorgente.
     
  13. LucaMs

    LucaMs Expert Licensed User

    Prova questo e se non funzionasse... peggio per te :p
     

    Attached Files:

  14. Gianni Sassanelli

    Gianni Sassanelli Member Licensed User

    Ciao Luca
    il tuo esempio funziona, il problema è il posizionamento.
    La canvas viene visualizzata in alto a destra come faccio a posizionarla in un punto da me voluto???
    questo è il problema

    Quanto alla libreria, sia Erel che Don Manfred usano la libreria PDF.Jar
    Erel non ha previsto il render di stringhe multi-linea (campi memo e/o varchar(max))
    DonManfred usa un oggetto TxtRect, attualmente presente nella libreria, ma non ha previsto la gestione del typeface per questo oggetto, altrimenti sarebbe tutto ok.

    Ad ogni modo con il workAround di Erel si riesce ad aggirare l'ostacolo creando un edtTextUI che viene renderizzato in BMP e dopo inserisco l'immagine risultante nel pdf. Non è il massimo ma non ho altra soluzione.
     
    Last edited: Aug 19, 2018
  15. LucaMs

    LucaMs Expert Licensed User

    Beh, nel mio esempio in realtà è la label in alto a destra, il canvas è inizializzato su tutta l'activity, se ricordo bene.
    Vediamo se si possa utilizzare un rect - ammetto di non aver smanettato molto con questa roba...
     
  16. LucaMs

    LucaMs Expert Licensed User

    Ma che dico (scrivo)? Puoi usare la label spostandola dove ti serve.
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice