Autore Topic: [RISOLTO] Differenze fra testo disegnato e testo scritto  (Letto 3578 volte)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.152
  • Tonno verde
    • Mostra profilo
[RISOLTO] Differenze fra testo disegnato e testo scritto
« il: 31 Gennaio 2014, 22:12:15 »
Sono un nuovo utente entusiasta (nuovo solo per dire avendo ai me superato la sessantina) di Linux  e di Gambas che trovo fantastici. Mi scuso anticipatamente se il tema in oggetto è stato già trattato ma io non sono stato capace di scovarlo.
Lavoro con:
[System]
Gambas=3.5.90
OperatingSystem=Linux
Kernel=3.11.0-15-generic
Architecture=x86_64
Distribution=Ubuntu 13.10
Desktop=GNOME
Theme=QGtk
Language=it_IT.UTF-8
Memory=15978M

[Libraries]
Cairo=libcairo.so.2.11200.16
Curl=libcurl.so.4.3.0
DBus=libdbus-1.so.3.7.4
GStreamer=libgstreamer-0.10.so.0.30.0
GStreamer=libgstreamer-1.0.so.0.200.0
GTK+3=libgtk-3.so.0.800.6
GTK+=libgtk-x11-2.0.so.0.2400.20
OpenGL=libGL.so.1.2.0
Poppler=libpoppler.so.43.0.0
Qt4=libQtCore.so.4.8.4
SDL=libSDL-1.2.so.0.11.4

[SVN]
3.5.99.1+svn20140131+build18~ubuntu13.10.1

Ho avuto conoscenza in Windows con VBA su VBE e li la stampa era gestita in automatico, quindi per me disegnare testo per la stampante è una nuova esperienza.

Problema:
non riesco a far combaciare le misure del testo disegnato sulla DrawingArea con le misure stampate su foglio.
Se io stampo la stringa “TESTOCORTO” con carattere “Ubuntu” 11 otterrò un testo di circa  millimetri 3 in altezza per 24,5 di lunghezza qualunque software io usi per scrivere.
Perché invece Gambas mi da misure diverse?
Per esemplificare quanto chiedo ho creato un programmino il cui codice allego, è un progetto grafico con una DrawingArea denominata “da” su cui il codice disegna per poi mandare alla stampa (metodo commentato per evitare sprechi di carta) la scritta “TESTOCORTO” che viene riquadrata sulla base delle misure fornite da Paint.Font.TestWidth e Paint.Font.TextHeight e poi disegna anche un riquadro giallo che è quello delle misure giuste usate dalla stampante.
Cosa sbaglio? Cosa non ho capito? Dove posso avere una risposta elementare adeguata alla mia bassa conoscenza della programmazione?
Tante grazie anticipate a chiunque vorrà aiutarmi.
Gianluigi
Codice: [Seleziona]
' Gambas class file

'' Ho creato questo esempio come progetto grafico con l'aggiunta alla Main form di una DrawingArea nominata "da".

Private miaStampante As Printer
Private Const MM_X_PX As Float = 0.3527 'per mutare millimetri in pixel e viceversa

Public Sub _new()

End

Public Sub Form_Open()

  miaStampante = New Printer As "Stampa"
  ' mie misure arbitrarie.
  Me.W = 600
  Me.H = 450
  da.Left = 0
  da.Top = 0
  da.W = 550
  da.H = 400
  da.Background = Color.White
  ' Crea subito il disegno e la stampa
  StampoSu("Video")
  'Stampare()
End

Public Sub Stampare()
  
  With miaStampante  
    'Verticale
    .Orientation = 0    
    ' A4 orizzontale
     '.Orientation = 1
    '.PaperWidth = 297
    '.PaperHeight = 210
    .Resolution = Desktop.Resolution '300      
    .FullPage = True 'parte da X0 e Y0 di paper    
    'Print .Resolution
  End With
  Me.Enabled = False
  Inc Application.Busy
  miaStampante.Print
  Dec Application.Busy
  Me.Enabled = True
  
End


Public Sub Stampa_Draw()
  
  StampoSu("Stampante")
  
End

Public Sub StampoSu(sDevice As String)
  
  Dim iH, iW As Integer
  Dim fSpazInLarg, fSpazInAlt, fLargRet, fAltRet As Float
  Dim sTesto As String
  Dim fTratteggio As Float[] = [3.0, 2.0]
                          
    
    Select Case sDevice
      Case "Video"
        da.Cached = True
        da.Clear        
        Paint.Begin(da)
        'Paint.Scale(2, 2)
      Case "Stampante"
        Paint.Begin(miaStampante)
      Case Else
        Return
    End Select    
    'Spazi iniziali di 20 mm.
    fSpazInLarg = 20 / MM_X_PX
    fSpazInAlt = 20 / MM_X_PX
    Paint.Background = Color.Black
    Paint.Save
    'Disegna testo
    'Paint.Font.Name = "Sans Serif"
    Paint.Font.Name = "Ubuntu"
    Paint.Font.Size = "11"    
    'Paint.Font.Bold = True
    sTesto = "TESTOCORTO"          
    iW = Paint.Font.TextWidth(sTesto)
    iH = Paint.Font.TextHeight(sTesto)
    Print Paint.Font.Size
    Print Paint.Font.Name
    Print "H testo = " & iH
    Print "L teso = " & iW                  
    Paint.DrawText(sTesto, fSpazInLarg, fSpazInAlt, 1, 1, 17) '35 = bottom; 33 = BottomLeft; 32 = BottomNormal; 17 = TopLeft    
    Paint.Restore
    ' Disegna rettangolo  
    fLargRet = CFloat(iW)
    fAltRet = CFloat(iH)
    Paint.LineWidth = 0.5    
    'Paint.Background = Color.Black      
    Paint.Rectangle(fSpazInLarg, fSpazInAlt, fLargRet, fAltRet)
    Paint.Stroke(True)
    Paint.Clip      
    ' Visualizza a schermo (rettangolo giallo) l'ingombro reale della scritta sul foglio stampato.
    fLargRet = 24.5 / MM_X_PX
    fAltRet = 3 / MM_X_PX
    Paint.Rectangle(fSpazInLarg, fSpazInAlt + (1 / MM_X_PX), fLargRet, fAltRet)
    Paint.Background = Color.RGB(255, 218, 90, 0)
    Paint.Dash = fTratteggio
    Paint.Stroke(True)
    Paint.Background = Color.RGB(255, 218, 90, 180)
    Paint.Fill
    Paint.End
  
End
« Ultima modifica: 08 Febbraio 2014, 16:04:25 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.266
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #1 il: 01 Febbraio 2014, 01:45:05 »
Se io stampo la stringa “TESTOCORTO” con carattere “Ubuntu” 11 otterrò un testo di circa  millimetri 3 in altezza per 24,5 di lunghezza qualunque software io usi per scrivere.
Perché invece Gambas mi da misure diverse?

Complimenti innanzitutto per il codice che hai scritto.

Ho provato la stampa con questo tuo codice, e devo dire che ho avuto (dunque con Gambas) una stampa perfettamente coerente con le misure da te indicate ed ottenute con altri software.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.152
  • Tonno verde
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #2 il: 01 Febbraio 2014, 17:27:34 »
Ringrazio Vuott e se ho compreso bene,anche a te (posso dare del tu?) Gambas da misure diverse fra video e stampa.
L'unica cosa che mi è venuta in mente per far combaciare le due cose è inserire dei fattori di compensazione.
A questo scopo aggiungo il codice sottostante che mi è costato un po di carta.
Rimane il fatto che mi sembra impossibile che questo approccio sia corretto.
Sono andato a guardare in CAIRO ma onestamente non ho capito un tubo.
A parte che il mio inglese è ridicolo (approfitto per ringraziare il traduttore di Google) io il C non lo so e no mi ci metto neppure a provare in quanto i miei studi si sono fermati alle elementari anche se posso “vantare” una licenza media.
Ci dovrà pur essere un modo corretto per mostrare a video ciò che si andrà a stampare! :rolleyes:  :hard:

Codice: [Seleziona]
' Gambas class file

'' Ho creato questo esempio come progetto grafico con l'aggiunta alla Main form di una DrawingArea nominata "da".

'' Questa è la seconda parte di codice che attraverso alcune aggiustature riesce a ottenere misure abbastanza
'' simili al reale.
'' Vale a dire quanto stampato e quanto visto a video sono simili nelle misure reali pur non perfettamente uguali.
 

Private miaStampante As Printer
Private iH As Integer
Private iW As Integer
Private Const MM_X_PX As Float = 0.3527 'per mutare millimetri in pixel e viceversa

Public Sub _new()

End

Public Sub Form_Open()

  miaStampante = New Printer As "Stampa"
  ' mie misure arbitrarie.
  Me.W = 600
  Me.H = 450
  da.Left = 0
  da.Top = 0
  da.W = 550
  da.H = 400
  da.Background = Color.White
  ' Crea subito il disegno e la stampa
  StampoSu("Video")
  'Stampare()
End

Public Sub Stampare()
 
  With miaStampante   
    'Verticale
    .Orientation = 0   
    ' A4 orizzontale
     '.Orientation = 1
    '.PaperWidth = 297
    '.PaperHeight = 210
    .Resolution = Desktop.Resolution '300       
    .FullPage = True 'parte da X0 e Y0 di paper   
    'Print .Resolution
  End With
  Me.Enabled = False
  Inc Application.Busy
  miaStampante.Print
  Dec Application.Busy
  Me.Enabled = True
 
End


Public Sub Stampa_Draw()
 
  StampoSu("Stampante")
 
End

Public Sub StampoSu(sDevice As String)
 
  'Dim iH, iW As Integer
  Dim fSpazInLarg, fSpazInAlt, fLargRet, fAltRet As Float
  Dim sTesto As String
  Dim fTratteggio As Float[] = [3.0, 2.0]
                           
   
    Select Case sDevice
      Case "Video"
        da.Cached = True
        da.Clear       
        Paint.Begin(da)
        'Paint.Scale(2, 2)
      Case "Stampante"
        Paint.Begin(miaStampante)
      Case Else
        Return
    End Select   
    'Spazi iniziali di 20 mm.
    fSpazInLarg = 20 / MM_X_PX
    fSpazInAlt = 20 / MM_X_PX
    Paint.Background = Color.Black   
    'Disegna testo
    'Paint.Font.Name = "Serif"
    'Paint.Font.Name = "Sans Serif"
    Paint.Font.Name = "Ubuntu"
    Paint.Font.Size = 12
    'Paint.Font.Bold = True
    sTesto = "TESTOCORTO"
    'sTesto = "questocorto"
    'sTesto = "QUESTOCORTO"               
    If sDevice = "Video" Then
      ' Riduce il font per renderlo sinile a quello stampato
      ' Memorizza altezza e larghezza del rettangolo di confronto
      ' che a video sembrerebbe sempre perfetto mentre stampato no.         
      Paint.Font.Size *= 73 / 100
      iW = Paint.Font.TextWidth(sTesto)
      iH = Paint.Font.TextHeight(sTesto)       
    Endif
   
    Print iH * MM_X_PX
    Print iW * MM_X_PX
                     
    Paint.DrawText(sTesto, fSpazInLarg, fSpazInAlt, 1, 1, 17) '35 = bottom; 33 = BottomLeft; 32 = BottomNormal; 17 = TopLeft   
   
    ' Disegna rettangolo del formato della scritta (quasi) senza differenze tra video e foglio stampato.
    fLargRet = CFloat(iW)
    fAltRet = CFloat(iH)
    Paint.LineWidth = 0.5   
    ' Ho tenuto conto dei tratti discendenti dei caratteri tipo la g minuscola la q sia minuscola che maiuscola ecc.
    ' per lasciare lo spazio inferiore. 
    If sDevice = "Video" Then
      Paint.Rectangle(fSpazInLarg, fSpazInAlt + (fAltRet * 16 / 100), fLargRet, fAltRet * 82 / 100)
    Else
      If CInt(Paint.Font.Size) Mod 2 = 1 Then
        Paint.Rectangle(fSpazInLarg, fSpazInAlt + (fAltRet * 16 / 100), fLargRet + (fLargRet * 6 / 100), fAltRet * 82 / 100)
        Print "DISPARI"
        Print Paint.Font.Size
      Else
        Paint.Rectangle(fSpazInLarg, fSpazInAlt + (fAltRet * 16 / 100), fLargRet + (fLargRet * 2 / 100), fAltRet * 82 / 100)
        Print "ELSE"
      Endif
       
    Endif
   
    Paint.Stroke 
    Paint.End
   
End
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #3 il: 01 Febbraio 2014, 17:47:16 »
Video e stampa non possono essere uguali, questo perché risoluzioni hanno risoluzioni differenti.
Devi per forza usare una compensazione che varierà in base alla risoluzione di stampa

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.152
  • Tonno verde
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #4 il: 01 Febbraio 2014, 20:21:42 »
Ringrazio fsurfing per la risposta, ma evidentemente o non riesco a spiegarmi o non riesco a capire.
Non capisco il perché  se una parola scritta in un dato formato di font sta per esempio 10 volte in un dato rettangolo perché a video ci sta solo (per dire) 6 volte? Perché il rettangolo a prescindere dalla risoluzione è effettivamente del formato impostato e se richiedo quanto è alto e largo ottengo le giuste misure e invece per le stringhe no? Non sono entrambi soggetti alla stessa risoluzione? Oppure intendi che il rettangolo non è soggetto alla risoluzione mentre la scritta si? Se è così dove posso studiarmi queste robe qui.
Inoltre quando stampo le stringhe a prescindere dalla risoluzione e dal software per quel tipo di “size e name” e di grandezza pagina otterrò sempre le stesse misure e lo stesso numero di righe per pagina. ???
« Ultima modifica: 01 Febbraio 2014, 21:08:56 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.266
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #5 il: 01 Febbraio 2014, 20:29:05 »
Ringrazio Vuott e se ho compreso bene,anche a te (posso dare del tu?) Gambas da misure diverse fra video e stampa.


Voglio precisare che il risultato della stampa ha dato un testo avente dimensione circa  millimetri 3 in altezza per 24,5 di lunghezza.
Non ho fatto, però, un confronto fra testo mostrato sullo schermo e quello stampato su carta.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.266
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #6 il: 01 Febbraio 2014, 20:48:06 »
Ho ripetuto ora la stampa, e l'ho confrontata con le dimensioni del testo mostrato sullo schermo: il testo stampato su carta risulta un po' più grande.
Anche a me è successa una cosa di questo genere, e - come già detto da fsurfing - devi effettuare delle correzioni.


Questa è la seconda parte di codice che attraverso alcune aggiustature riesce a ottenere misure abbastanza simili al reale.
A me invece stampa il rettangolo un pochino più grande di quello che vedo nello schermo, ed il testo molto più grande di quello sullo schermo.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.152
  • Tonno verde
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #7 il: 01 Febbraio 2014, 20:49:09 »
 :-[
Scusate ma credo occorra una precisazione quando scrivo “altro software” io non intendo un altro software per programmare ma per esempio scrivendo con Libre Office o Scribus o Inkscape.
Per programmare io uso e userò solo il sublime Gambas che mi avanza e cresce.
Faccio presente che ho cancellato Windows 7 Professional e da ora in poi userò solo Linux e nient'altro che Linux amen.
Devo imparare tante di quelle cose che non posso essere distratto da nulla che non sia Gambas in Linux.
A proposito per studiare ho fatto delle traduzioni(acce) di alcuni capitoli di A Beginner's Guide to Gambas – Revised Edition, e qualcosa ho trovato già in internet. In particolare ho tradotto il capitolo sui DB se interessa posso inviarlo.
Ciao a tutti.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.152
  • Tonno verde
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #8 il: 01 Febbraio 2014, 21:00:00 »

Questa è la seconda parte di codice che attraverso alcune aggiustature riesce a ottenere misure abbastanza simili al reale.
A me invece stampa il rettangolo un pochino più grande di quello che vedo nello schermo, ed il testo molto più grande di quello sullo schermo.
[/quote]

Intendi dire che la scritta trasborda il rettangolo?
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.266
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #9 il: 01 Febbraio 2014, 21:03:29 »
Scusate ma credo occorra una precisazione quando scrivo “altro software” io non intendo un altro software per programmare ma per esempio scrivendo con Libre Office o Scribus o Inkscape.

Sì, questo io l'avevo capito.


Intendi dire che la scritta trasborda il rettangolo?
Sì, ma solo in lunghezza, e per circa 7 millimetri.

A proposito per studiare ho fatto delle traduzioni(acce) di alcuni capitoli di A Beginner's Guide to Gambas – Revised Edition, e qualcosa ho trovato già in internet. In particolare ho tradotto il capitolo sui DB se interessa posso inviarlo.

Non abbiamo nella WIKI traduzioni da altri testi.
Forse potresti creare una discussione ad hoc qui nel forum, ed allegarvi il file compresso della tua traduzione. Io penso, però, che sarebbe opportuno consultare ed attendere il parere degli Amministratori del forum, soprattutto in ordine - se debbano applicarsi - alle norme del diritto d'autore in riferimento alle traduzioni.  :-\
« Ultima modifica: 01 Febbraio 2014, 21:05:16 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.152
  • Tonno verde
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #10 il: 01 Febbraio 2014, 21:29:20 »

Sì, ma solo in lunghezza, e per circa 7 millimetri.

Non abbiamo nella WIKI traduzioni da altri testi.
Forse potresti creare una discussione ad hoc qui nel forum, ed allegarvi il file compresso della tua traduzione. Io penso, però, che sarebbe opportuno consultare ed attendere...

Per l'ultima parte ti ringrazio del consiglio, aspetterò. Iinvece per quanto riguarda i 7 millimetri mi mandi nello sconforto, cosa mi consigli di fare dove posso trovare una guida che mi possa aiutare a comprendere l'arcano, sempre che io sia in grado di capire. :'(
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.266
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #11 il: 01 Febbraio 2014, 23:36:59 »
.... per quanto riguarda i 7 millimetri mi mandi nello sconforto, cosa mi consigli di fare

A me è capitato una volta questo tuo problema, ed effettivamente è un vero fastidio !
Io ho cercato di ottenere la corripondenza delle dimensioni dei caratteri fra schermo e stampato, calibrando i valori (dando, cioè, valori leggermenti diversi) della proprietà Paint.Font.Size nel codice afferente alla stampa ed in quello alla DrawingArea.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #12 il: 02 Febbraio 2014, 01:31:36 »
Se usi i metodi draw per stampare e disegnare sicuramente avrai una migliore corrispondenza.
usando invece i metodi paint entrano in goco altre considerazioni dovute alle matrix che complicano un bel po il tutto.

se hai gambas > 3.2 prova a stampare con i metodi draw,
i in quel modo non jo mai avuto problemi

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.266
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #13 il: 02 Febbraio 2014, 01:56:25 »
Se usi i metodi draw per stampare e disegnare sicuramente avrai una migliore corrispondenza.
usando invece i metodi paint entrano in goco altre considerazioni dovute alle matrix che complicano un bel po il tutto.


Suggerimento molto interessante. Ma, poiché Gianluigi ha installato Gambas=3.5.90, forse avrà qualche problema  :-\ , visto che la documentazione della Class Draw dice che:
"The Draw class is deprecated since Gambas 3.4. It is now emulated through the Paint class".


Ad ogni modo, ho provato entrambi i codici di Gianluigi con la Classe Draw, ma non ho avuto miglioramenti.  :-\
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #14 il: 02 Febbraio 2014, 13:48:53 »
comunque l' argomento è molto interessante,

io per ottenere una stampa "precisa" al millimetro per quanto rigurada le linee , quadrati ed una precisione quasi millimetrica per il testo ho usato il codice che allego all' esempio.

ps per non sprecare carta si stampa su pdf :)