Stampare il contenuto di una DrawingArea

Da Gambas-it.org - Wikipedia.

Per stampare il contenuto grafico presente in una DrawingArea, si potrà attuare il seguente procedimento:

  • si provvede a disegnare e scrivere all'interno della DrawingArea mediante l'evento _Draw();
  • si imposta la fase di stampa con la Classe Printer;
  • viene richiamato l'evento _Draw() della Classe Printer per ogni pagina da stampare;
  • sia per disegnare nella DrawingArea sia per stamparea il disegno si richiama una sub-procedura, nella quale sono presenti i necessari valori ed impostazioni.


Esempio generico

Public Sub DrawingArea1_Draw()

' Richiamiamo ai fini del disegno sulla "DrawingArea" le impostazioni presenti nella sub-procedura":
  DisegnoStampa()
  
End


Public Sub Button1_Click()

  With Printer1
    .Configure
    .Orientation = 0
    .Paper = 2
    .Resolution = Desktop.Resolution
    .GrayScale = False
' Volendo, si può stampare/creare un file .pdf o .ps, anziché stampare
' su foglio con la stampante, inserendo questa riga di comando:
  ' .OutputFile = "percorso_mio_file.pdf"
    .Print
  End With

End


Public Sub Printer1_Draw()

' Richiamiamo ai fini della stampa le impostazioni presenti nella sub-procedura":
  DisegnoStampa()

End


Private Procedure DisegnoStampa()

 With Paint
   .Brush = Paint.Color(Color.Red)
   .MoveTo(200, 200)
   .RelLineTo(0, 100)
   .Stroke
   .DrawText("Testo qualsiasi", 10, 10, 20, 20)
   .End
 End With

End


Stampare garantendo la corrispondenza fra testo mostrato sulla DrawingArea e testo stampato

Nel caso sia necessaria una precisa corrispondenza fra quanto mostrato sulla DrawingArea e quanto stampato, è possibile utilizzare il seguente codice esemplificativo: |1|

Public Sub Form_Show()

 Me.Center
 
 DrawingArea1.Resize(1653, 2338)   ' Dimensioni in pixel di un foglio A4 a 200 DPI
 
End


Public Sub DrawingArea1_Draw()
 
  Paint.Begin(DrawingArea1)
   
  disegna()
  
  Paint.End
 
End


Public Sub disegna()
 
 Dim X, Y As Float
 Dim dx, dy, DXT As Float
 Dim IH, IW As Float
 

' Calcolo risolutore per linee e quadrati:
  dx = DrawingArea1.W / 211
  dy = DrawingArea1.H / 297

 
  X = 20 * dx   ' bordo di 20 mm
  Y = 20 * dy   ' bordo di 20 mm

  Paint.Font.Name = "Ubuntu"

  Paint.Font.Size = RIDIMENSIONA(11)

  Paint.drawText("Testo Qualsiasi", X, y + Paint.Font.TextHeight("Testo Qualsiasi"))

' Disegnamo un rettangolo intorno al testo,
' per verificare la corrispondenza delle dimensioni del testo mostrato sullo schermo
' all'interno della "DrawingArea" e le dimensioni del testo stampato:
  Paint.Rectangle(X, Y, Paint.Font.TextWidth("Testo Qualsiasi"), Paint.Font.TextHeight("Testo Qualsiasi"))
  Paint.Stroke

End


Public Function RIDIMENSIONA(size As Integer) As Integer
 
  If Paint.Device = DrawingArea1 Then
    Return size * 2
  Else
    Return size
  Endif
 
End


Public Sub Button2_Click()

  If Printer1.Configure() Then Return
   
  With Printer1
    .FullPage = True
    .Orientation = 0
    .Resolution = 200
    .PaperHeight = 297
    .PaperWidth = 211
    ' .OutputFile = "/tmp/file.pdf"  Se si vuole una stampa su file .PDF, attivare anche questa riga
    .Print
  End With

End


Public Sub Printer1_Begin()
 
 disegna()
 
End


Note

[1] Il codice è stato realizzato dall'utente fsurfing del forum di www.gambas-it.org