Italian [B4A] libreria Printing

Gianni M

Well-Known Member
Licensed User
Longtime User
la libreria "Printing" permette di creare un documento pdf ed eventualmente stamparlo;
ho notato che due device diversi tra loro (versione android, dimensione schermo, risoluzione, ...), producono/creano il testo con un "size" del font differente;
esempio:

B4X:
Dim pdf As PdfDocument
pdf.Initialize
pdf.StartPage(595, 842)
'6=DIMENSIONE DEL FONT
pdf.Canvas.DrawText("PROVA GENERAZIONE DOCUMENTO PDF", 50, 60, Typeface.DEFAULT_BOLD, 6, Colors.Black, "LEFT")
'ecc, ecc, ecc
'bla, bla, bla
' e poi stampo il documento

tutto funziona bene, ma ottengo due stampe "differenti" (font diverso) a seconda del device utilizzato

dove è il problema?
 

Gianni M

Well-Known Member
Licensed User
Longtime User
forse ho trovato la soluzione;
il buon Erel dice:
You should divide the text size with GetDeviceLayoutValues.Scale when calling Canvas.DrawText.
B4X:
pdf.Canvas.DrawText("Hello", 100, 100, Typeface.DEFAULT_BOLD, 30 / GetDeviceLayoutValues.Scale , Colors.Yellow, "CENTER")
invece AI mi consiglia di utilizzare un font esterno
B4X:
Dim FontSize As Float = 10
Dim fnt As Typeface = Typeface.LoadFromAssets("Roboto-Regular.ttf")

pdf.Canvas.DrawText( _
    "Hello", _
    100, _
    100, _
    fnt, _
    FontSize, _
    Colors.Black, _
    "LEFT")
e poi di "copiare" i due pdf (due device), sul pc e visualizzare/stampare direttamente dal pc, per confrontare se ci sono differenze

da provare!
 

LucaMs

Expert
Licensed User
Longtime User
forse ho trovato la soluzione;
il buon Erel dice:
You should divide the text size with GetDeviceLayoutValues.Scale when calling Canvas.DrawText.
B4X:
pdf.Canvas.DrawText("Hello", 100, 100, Typeface.DEFAULT_BOLD, 30 / GetDeviceLayoutValues.Scale , Colors.Yellow, "CENTER")
invece AI mi consiglia di utilizzare un font esterno
B4X:
Dim FontSize As Float = 10
Dim fnt As Typeface = Typeface.LoadFromAssets("Roboto-Regular.ttf")

pdf.Canvas.DrawText( _
    "Hello", _
    100, _
    100, _
    fnt, _
    FontSize, _
    Colors.Black, _
    "LEFT")
e poi di "copiare" i due pdf (due device), sul pc e visualizzare/stampare direttamente dal pc, per confrontare se ci sono differenze

da provare!
La IA ha ragione solo a metà. Se la stampa che ottieni ha, come hai scritto, sia il tipo di font che il FontSize diversi, devi fare un mix delle due risposte.
Usare nell'app un tuo font file ma anche eseguire la divisione suggerita da Erel, perchè il size potrebbe dipendere dalle impostazioni dei due dispositivi (e la IA ha impostato FontSize fisso).
 

Gianni M

Well-Known Member
Licensed User
Longtime User
Senza fare modifiche all' App, ho cambiato il font caratteri dello schermo e ottengono due stampe diverse. Quindi sembra corretto utilizzare GetDeviceLayoutValues.Scale. domani sono in ufficio e verifico
 
Top