Differenze tra le versioni di "Stampare il contenuto di una DrawingArea"

Da Gambas-it.org - Wikipedia.
 
(13 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
Per stampare il contenuto grafico presente in una ''DrawingArea'', si potrà attuare il seguente procedimento:
 
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 provvede a disegnare e scrivere all'interno della ''DrawingArea'' mediante l'Evento "_Draw()";
 
* si imposta la fase di stampa con la Classe ''Printer'';
 
* si imposta la fase di stampa con la Classe ''Printer'';
* viene richiamato l'evento ''_Draw()'' della Classe ''Printer'' per ogni pagina da stampare;
+
* 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.
+
* sia per disegnare nella ''DrawingArea'' sia per stampare il disegno si richiama una sub-procedura, nella quale sono presenti i necessari valori ed impostazioni.
  
  
 
===Esempio generico===
 
===Esempio generico===
  '''Public''' Sub DrawingArea1_Draw()
+
  Public Sub DrawingArea1_Draw()
 
   
 
   
  <FONT color=gray>' ''Richiamiamo ai fini del disegno sulla "DrawingArea" le impostazioni presenti nella sub-procedura":</font>
+
  <FONT color=gray>' ''Richiama ai fini del disegno sulla "DrawingArea" le impostazioni presenti nella sub-procedura":</font>
  DisegnoStampa()
+
  DisegnoStampa()
 
 
'''End'''
 
 
   
 
   
 +
End
 
   
 
   
'''Public''' Sub Button1_Click()
 
 
   
 
   
  With Printer1
+
  Public Sub Button1_Click()
    .Configure
 
    .Orientation = 0
 
    .Paper = 2
 
    .Resolution = Desktop.Resolution
 
    .GrayScale = False
 
  <FONT color=gray>' ''Volendo, si può stampare/creare un file .pdf o .ps, anziché stampare''
 
' ''su foglio con la stampante, inserendo questa riga di comando:''
 
  ' '''''.OutputFile = "/percorso/del/mio/file.pdf"'''''</font>
 
    .Print
 
  End With
 
 
   
 
   
  '''End'''
+
  With Printer1
 +
    .Configure
 +
    .Orientation = .Portrait
 +
    .Paper = .A4
 +
    .Resolution = Desktop.Resolution
 +
    .GrayScale = False
 +
  <FONT color=gray>' ''Volendo, si può stampare/creare un file .pdf o .ps, anziché stampare su foglio con la stampante, inserendo questa riga di comando:''
 +
  ' '''''.OutputFile = "/percorso/del/mio/file.pdf"'''''   '</font> <SUP>&#091;[[#Note|nota 1]]&#093;</sup>
 +
    .Print
 +
  End With
 
   
 
   
 +
End
 
   
 
   
'''Public''' Sub Printer1_Draw()
 
 
   
 
   
  <FONT color=gray>' ''Richiamiamo ai fini della stampa le impostazioni presenti nella sub-procedura":</font>
+
Public Sub Printer1_Draw()
 +
 +
  <FONT color=gray>' ''Richiama ai fini della stampa le impostazioni presenti nella sub-procedura":</font>
 
   DisegnoStampa()
 
   DisegnoStampa()
 
   
 
   
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Private''' Procedure DisegnoStampa()
+
  Private Procedure DisegnoStampa()
 
   
 
   
 
   With Paint
 
   With Paint
Riga 51: Riga 50:
 
   End With
 
   End With
 
   
 
   
  '''End'''
+
  End
 
 
  
  
 
==Stampare garantendo la corrispondenza fra testo mostrato sulla ''DrawingArea'' e testo stampato==
 
==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: |[[#Note|1]]|
+
Nel caso sia necessaria una precisa corrispondenza fra quanto mostrato sulla ''DrawingArea'' e quanto stampato, è possibile utilizzare il seguente codice esemplificativo: <SUP>&#091;[[#Note|nota 2]]&#093;</sup>
  '''Public''' Sub Form_Show()
+
  Public Sub Form_Show()
 
   
 
   
 
   Me.Center
 
   Me.Center
 
    
 
    
 
   DrawingArea1.Resize(1653, 2338)  <FONT color=gray>' ''Dimensioni in pixel di un foglio A4 a 200 DPI''</font>
 
   DrawingArea1.Resize(1653, 2338)  <FONT color=gray>' ''Dimensioni in pixel di un foglio A4 a 200 DPI''</font>
 
+
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Public''' Sub DrawingArea1_Draw()
+
  Public Sub DrawingArea1_Draw()
 
      
 
      
  disegna()
+
  disegna()
 
+
  Paint.End
+
  Paint.End
 
+
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Public''' Sub disegna()
+
  Public Sub disegna()
 
    
 
    
 
   Dim X, Y As Float
 
   Dim X, Y As Float
 
   Dim dx, dy, DXT As Float
 
   Dim dx, dy, DXT As Float
 
   Dim IH, IW As Float
 
   Dim IH, IW As Float
 
 
 
   
 
   
 
  <FONT color=gray>' ''Calcolo risolutore per linee e quadrati:''</font>
 
  <FONT color=gray>' ''Calcolo risolutore per linee e quadrati:''</font>
  dx = DrawingArea1.W / 211
+
  dx = DrawingArea1.W / 211
  dy = DrawingArea1.H / 297
+
  dy = DrawingArea1.H / 297
 
   
 
   
    
+
   X = 20 * dx  <FONT color=gray>' ''bordo di 20 mm''</font>
  X = 20 * dx  <FONT color=gray>' ''bordo di 20 mm''</font>
+
  Y = 20 * dy  <FONT color=gray>' ''bordo di 20 mm''</font>
  Y = 20 * dy  <FONT color=gray>' ''bordo di 20 mm''</font>
+
 +
  Paint.Font.Name = "Ubuntu"
 +
 +
  Paint.Font.Size = RIDIMENSIONA(11)
 
   
 
   
  Paint.Font.Name = "Ubuntu"
+
  Paint.drawText("Testo Qualsiasi", X, y + Paint.Font.TextHeight("Testo Qualsiasi"))
 
   
 
   
  Paint.Font.Size = RIDIMENSIONA(11)
+
<FONT color=gray>' ''Disegna 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:''</font>
 +
  Paint.Rectangle(X, Y, Paint.Font.TextWidth("Testo Qualsiasi"), Paint.Font.TextHeight("Testo Qualsiasi"))
 +
  Paint.Stroke
 
   
 
   
  Paint.drawText("Testo Qualsiasi", X, y + Paint.Font.TextHeight("Testo Qualsiasi"))
+
End
 
   
 
   
<FONT color=gray>' ''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:''</font>
 
  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
 
   
 
   
  '''Public''' Function RIDIMENSIONA(size As Integer) As Integer
+
  End
 
 
  If Paint.Device = DrawingArea1 Then
 
    Return size * 2
 
  Else
 
    Return size
 
  Endif
 
 
 
'''End'''
 
 
   
 
   
 
   
 
   
  '''Public''' Sub Button1_Click()
+
  Public Sub Button1_Click()
 
   
 
   
  If Printer1.Configure() Then Return
+
  If Printer1.Configure() Then Return
 
      
 
      
  With Printer1
+
  With Printer1
    .FullPage = True
+
    .FullPage = True
    .Orientation = 0
+
    .Orientation = .Portrait
    .Resolution = 200
+
    .Resolution = 200
    .PaperHeight = 297
+
    .PaperHeight = 297
    .PaperWidth = 211
+
    .PaperWidth = 211
    <FONT color=gray>' '''.OutputFile = "/tmp/file.pdf"'''  ''Se si vuole una stampa su file .PDF, attivare anche questa riga''</font>
+
    <FONT color=gray>' '''.OutputFile = "/tmp/file.pdf"'''  ''Se si vuole una stampa su file .PDF, attivare anche questa riga''</font>
    .Print
+
    .Print
  End With
+
  End With
 
   
 
   
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Public''' Sub Printer1_Begin()
+
  Public Sub Printer1_Begin()
 
    
 
    
 
   disegna()
 
   disegna()
 
    
 
    
  '''End'''
+
  End
 
 
  
  
 
==Stampare il contenuto di una determinata DrawingArea scelta fra 2 o più==
 
==Stampare il contenuto di una determinata DrawingArea scelta fra 2 o più==
Se sul ''Form'' sono presenti due o più oggetti ''DrawingArea'' e si intende stampare solo il contenuto di una ''DrawingArea'' fra quelle, si potrà adottare un codice del seguente tenore, che tende a riconfermare nelle funzioni e proprietà di stampa i dati del disegno utilizzati in fase di mero disegno all'interno della ''DrawingArea'' prescelta:
+
Se sul ''Form'' sono presenti due o più oggetti ''DrawingArea'' e si intende stampare solo il contenuto di una ''DrawingArea'' fra quelle, si potrà adottare un codice del seguente tenore, che tende a riconfermare nelle funzioni e proprietà di stampa i dati del disegno utilizzati all'interno della ''DrawingArea'' prescelta:
  '''Public''' Sub DrawingArea1_Draw()   
+
  Public Sub Form_Open()
 +
 +
  DrawingArea1.Name = "DrawingArea 1"
 +
  DrawingArea2.Name = "DrawingArea 2"
 +
 
 +
<FONT Color=gray>' ''Assegna le due "DrawingArea" al medesimo Gruppo di Eventi:''</font>
 +
  Object.Attach(DrawingArea1, Me, "DrAr")
 +
  Object.Attach(DrawingArea2, Me, "DrAr")
 +
   
 +
End 
 +
 
 +
 +
Public Sub DrAw_Draw() 
 +
 +
  With Paint 
 +
    .Brush = Paint.Color(Color.Red) 
 +
    .MoveTo(200, 200) 
 +
    .RelLineTo(0, 200) 
 +
    .Stroke 
 +
    .DrawText("DrawingArea2", 200, 200, 20, 20) 
 +
    .End 
 +
  End With 
 +
 +
End 
 +
 
 +
 +
Public Sub Button1_Click() 
 +
 +
  With Printer1 
 +
    .Configure 
 +
    .Orientation = .Portrait
 +
    .Paper = .A4
 +
    .Resolution = Desktop.Resolution 
 +
    .GrayScale = False
 +
<FONT Color=gray>' ''.OutputFile = "/tmp/prova.pdf"''</font>
 +
    .Print 
 +
  End With 
 +
 +
End 
 +
 
 +
 +
Public Sub Printer1_Draw() 
 +
 +
  Dim n As Byte 
 +
 
 +
  n = Val(InputBox("Quale DrawingArea vuoi stampare ?")) 
 +
 +
<FONT Color=gray>' ''Richiamiamo ai fini della stampa le impostazioni presenti nella sub-procedura":''</font>
 +
  Stampa(n)
 +
 +
End
 +
 
 +
 +
Private Procedure Stampa(d As Byte) 
 +
 +
  Dim mx, my, rY, dx, dy As Integer 
 +
  Dim dS As String  
 
        
 
        
 +
  If d = 1 Then 
 +
    mx = 100 
 +
    my = 100 
 +
    rY = 100 
 +
    dX = 10 
 +
    dY = 10 
 +
    dS = DrawingArea1.Name
 +
  Else 
 +
    mx = 200 
 +
    my = 200 
 +
    rY = 200 
 +
    dX = 200 
 +
    dY = 200 
 +
    dS = DrawingArea1.Name
 +
  Endif 
 +
 
   With Paint   
 
   With Paint   
 +
    .Begin(Printer1) 
 
     .Brush = Paint.Color(Color.Red)   
 
     .Brush = Paint.Color(Color.Red)   
     .MoveTo(100, 100)   
+
     .MoveTo(mx, my)   
     .RelLineTo(0, 100)   
+
     .RelLineTo(0, rY)   
 
     .Stroke   
 
     .Stroke   
     .DrawText("DrawingArea1", 10, 10, 20, 20)   
+
     .DrawText(dS, dX, dY, 20, 20)   
 
     .End   
 
     .End   
 
   End With   
 
   End With   
     
 
'''End''' 
 
     
 
 
   
 
   
  '''Public''' Sub DrawingArea2_Draw()   
+
  End
     
+
 
 +
 
 +
==Stampare il contenuto di due o più DrawingArea ciascuno su una pagina==
 +
Riprendendo il codice precedente, si stamperà il contenuto di ciascuna ''DrawingAea'' su una differente pagina.
 +
<BR>Quindi in questo caso saranno stampate in totale 2 pagine: sulla prima sarà stampato il contenuto della prima ''DrawingAea'', e sulla seconda pagina sarà stampato il contenuto della seconda ''DrawingAea''.
 +
Private n As Short
 +
 +
 +
Public Sub Form_Open()
 +
 
 +
  DrawingArea1.Name = "DrawingArea 1"
 +
  DrawingArea2.Name = "DrawingArea 2"
 +
 
 +
<FONT Color=gray>' ''Assegna le due "DrawingArea" al medesimo Gruppo di Eventi:''</font>
 +
  Object.Attach(DrawingArea1, Me, "DrAr")
 +
  Object.Attach(DrawingArea2, Me, "DrAr")
 +
 +
End 
 +
 
 +
 +
Public Sub DrAw_Draw()   
 +
 
   With Paint   
 
   With Paint   
 
     .Brush = Paint.Color(Color.Red)   
 
     .Brush = Paint.Color(Color.Red)   
Riga 167: Riga 251:
 
     .End   
 
     .End   
 
   End With   
 
   End With   
     
+
  '''End'''  
+
  End   
     
+
 
     
+
  '''Public''' Sub Button1_Click()   
+
  Public Sub Button1_Click()   
     
+
 
   With Printer1   
 
   With Printer1   
 
     .Configure   
 
     .Configure   
     .Orientation =
+
     .Orientation = .Portrait
     .Paper =
+
     .Paper = .A4
     .Resolution = Desktop.Resolution   
+
     .Resolution = Desktop.Resolution
     .GrayScale = False   
+
  <FONT Color=gray>' ''Imposta il numero delle pagine da stampare:''</font>
 +
    .Count = 2
 +
     .GrayScale = False
 +
  <FONT Color=gray>' ''.OutputFile = "/tmp/prova.pdf"''</font>
 
     .Print   
 
     .Print   
 
   End With   
 
   End With   
     
+
  '''End'''  
+
  End   
     
+
 
     
+
  '''Public''' Sub Printer1_Draw()   
+
  Public Sub Printer1_Draw()   
     
+
  Dim n As Byte  
+
  <FONT Color=gray>' ''Incrementa il numero della pagina da stampare (il numero della prima pagina da stampare '''non''' deve essere = 0):''</font>
 
+
  inc n
  n = Val(InputBox("Quale DrawingArea vuoi stampare ?"))   
+
   
     
 
 
  <FONT Color=gray>' ''Richiamiamo ai fini della stampa le impostazioni presenti nella sub-procedura":''</font>
 
  <FONT Color=gray>' ''Richiamiamo ai fini della stampa le impostazioni presenti nella sub-procedura":''</font>
  Stampa(n)
+
  Stampa(n)
     
+
  '''End'''
+
  End
     
+
 
     
+
  '''Private''' Procedure Stampa(d As Byte)   
+
  Private Procedure Stampa(d As Byte)   
     
+
 
   Dim mx, my, rY, dx, dy As Integer   
 
   Dim mx, my, rY, dx, dy As Integer   
 
   Dim dS As String   
 
   Dim dS As String   
     
+
 
   If d = 1 Then   
 
   If d = 1 Then   
 
     mx = 100   
 
     mx = 100   
Riga 208: Riga 294:
 
     dX = 10   
 
     dX = 10   
 
     dY = 10   
 
     dY = 10   
     dS = "1" 
+
     dS = DrawingArea1.Name
 
   Else   
 
   Else   
 
     mx = 200   
 
     mx = 200   
Riga 215: Riga 301:
 
     dX = 200   
 
     dX = 200   
 
     dY = 200   
 
     dY = 200   
     dS = "2" 
+
     dS = DrawingArea1.Name
 
   Endif   
 
   Endif   
     
+
 
   With Paint   
 
   With Paint   
 
     .Begin(Printer1)   
 
     .Begin(Printer1)   
Riga 224: Riga 310:
 
     .RelLineTo(0, rY)   
 
     .RelLineTo(0, rY)   
 
     .Stroke   
 
     .Stroke   
     .DrawText("DrawingArea" & dS, dX, dY, 20, 20)   
+
     .DrawText(dS, dX, dY, 20, 20)   
 
     .End   
 
     .End   
 
   End With   
 
   End With   
     
+
  '''End''' 
+
  End
  
 +
 +
==Stampare il contenuto di una DrawingArea mediante le risorse del Componente gb.media==
 +
Si potrà stampare il contenuto di una ''DrawingArea'' anche mediante le risorse del Componente gb.media:
 +
Private temporaneo As String
 +
 +
 +
Public Sub Button1_Click()
 +
 +
  Dim pl As MediaPipeline
 +
  Dim src, vdc, enc, snk As MediaControl
 +
 +
  temporaneo = Temp
 +
 +
  pl = New MediaPipeline
 +
 +
  src = New MediaControl(pl, "ximagesrc")
 +
<FONT Color=gray>' ''Assegna alla proprietà "xid" del plugin "ximagesrc" il numero idetificativo della "DrawingArea", affinché ne catturi quanto da essa visualizzato:''</font>
 +
  src["xid"] = DrawingArea1.Id
 +
  vdc = New MediaControl(pl, "videoconvert")
 +
  enc = New MediaControl(pl, "pngenc")
 +
  snk = New MediaControl(pl, "filesink")
 +
  snk["location"] = temporaneo
 +
 +
  src.LinkTo(vdc)
 +
  vdc.LinkTo(enc)
 +
  enc.LinkTo(snk)
 +
 +
<FONT Color=gray>' ''Effettua la ripresa dell'immagine:''</font>
 +
  pl.Play()
 +
  pl.Stop()
 +
  pl.Close()
 +
 +
  Print "Cattura immagine effettuata"
 +
 +
  With Printer1
 +
    .Configure
 +
    .Orientation = .Portrait
 +
    .Paper = .A4
 +
    .Resolution = Desktop.Resolution
 +
    .GrayScale = False
 +
<FONT Color=gray>' ''Volendo, si può stampare/creare un file .pdf, anziché stampare su foglio con la stampante, inserendo questa riga di comando:''
 +
    '''.OutputFile = "/tmp/file.pdf"'''</font>
 +
    .Print
 +
  End With
 +
 +
End
 +
 +
 +
Public Sub Printer1_Draw()
 +
 +
  With Paint
 +
    .DrawImage(Image.Load(temporaneo), 0, 0)
 +
    .End
 +
  End With
 +
 +
End
 +
 +
 +
Public Sub DrawingArea1_Draw()
 +
 +
  With Paint
 +
    .DrawImage(Image.Load("<FONT Color=darkgreen>''/percorso/del/file/immagine''</font>"), 0, 0)
 +
    .DrawText("Testo qualsiasi", 200, 100)
 +
    .End
 +
  End With
 +
 +
End
  
  
  
 
=Note=
 
=Note=
[1] Il codice è stato realizzato dall'utente [http://www.gambas-it.org/smf/index.php?action=profile;u=28 fsurfing] del forum di [http://www.gambas-it.org www.gambas-it.org]
+
[1] Vedere anche: [[Generare un file PDF da una DrawingArea]].
 +
 
 +
[2] Il codice è stato realizzato dall'utente [http://www.gambas-it.org/smf/index.php?action=profile;u=28 fsurfing] del forum di [http://www.gambas-it.org www.gambas-it.org]

Versione attuale delle 14:09, 27 giu 2024

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 stampare il disegno si richiama una sub-procedura, nella quale sono presenti i necessari valori ed impostazioni.


Esempio generico

Public Sub DrawingArea1_Draw()

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

End


Public Sub Button1_Click()

 With Printer1
   .Configure
   .Orientation = .Portrait
   .Paper = .A4
   .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/del/mio/file.pdf"   ' [nota 1]
   .Print
 End With

End


Public Sub Printer1_Draw()

' Richiama 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: [nota 2]

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()
    
 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"))

' Disegna 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 Button1_Click()

 If Printer1.Configure() Then Return
   
 With Printer1
   .FullPage = True
   .Orientation = .Portrait
   .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


Stampare il contenuto di una determinata DrawingArea scelta fra 2 o più

Se sul Form sono presenti due o più oggetti DrawingArea e si intende stampare solo il contenuto di una DrawingArea fra quelle, si potrà adottare un codice del seguente tenore, che tende a riconfermare nelle funzioni e proprietà di stampa i dati del disegno utilizzati all'interno della DrawingArea prescelta:

Public Sub Form_Open()

 DrawingArea1.Name = "DrawingArea 1"
 DrawingArea2.Name = "DrawingArea 2"
 
' Assegna le due "DrawingArea" al medesimo Gruppo di Eventi:
 Object.Attach(DrawingArea1, Me, "DrAr")
 Object.Attach(DrawingArea2, Me, "DrAr")
   
End  
  

Public Sub DrAw_Draw()  

 With Paint  
   .Brush = Paint.Color(Color.Red)  
   .MoveTo(200, 200)  
   .RelLineTo(0, 200)  
   .Stroke  
   .DrawText("DrawingArea2", 200, 200, 20, 20)  
   .End  
 End With  

End  
  

Public Sub Button1_Click()  

 With Printer1  
   .Configure  
   .Orientation = .Portrait
   .Paper = .A4
   .Resolution = Desktop.Resolution  
   .GrayScale = False
' .OutputFile = "/tmp/prova.pdf"
   .Print  
 End With  

End  
  

Public Sub Printer1_Draw()  

 Dim n As Byte  
 
 n = Val(InputBox("Quale DrawingArea vuoi stampare ?"))  

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

End
  

Private Procedure Stampa(d As Byte)  

 Dim mx, my, rY, dx, dy As Integer  
 Dim dS As String  
     
 If d = 1 Then  
   mx = 100  
   my = 100  
   rY = 100  
   dX = 10  
   dY = 10  
   dS = DrawingArea1.Name
 Else  
   mx = 200  
   my = 200  
   rY = 200  
   dX = 200  
   dY = 200  
   dS = DrawingArea1.Name
 Endif  

 With Paint  
   .Begin(Printer1)  
   .Brush = Paint.Color(Color.Red)  
   .MoveTo(mx, my)  
   .RelLineTo(0, rY)  
   .Stroke  
   .DrawText(dS, dX, dY, 20, 20)  
   .End  
 End With  

End


Stampare il contenuto di due o più DrawingArea ciascuno su una pagina

Riprendendo il codice precedente, si stamperà il contenuto di ciascuna DrawingAea su una differente pagina.
Quindi in questo caso saranno stampate in totale 2 pagine: sulla prima sarà stampato il contenuto della prima DrawingAea, e sulla seconda pagina sarà stampato il contenuto della seconda DrawingAea.

Private n As Short


Public Sub Form_Open()
 
 DrawingArea1.Name = "DrawingArea 1"
 DrawingArea2.Name = "DrawingArea 2"
 
' Assegna le due "DrawingArea" al medesimo Gruppo di Eventi:
 Object.Attach(DrawingArea1, Me, "DrAr")
 Object.Attach(DrawingArea2, Me, "DrAr")

End  
  

Public Sub DrAw_Draw()  

 With Paint  
   .Brush = Paint.Color(Color.Red)  
   .MoveTo(200, 200)  
   .RelLineTo(0, 200)  
   .Stroke  
   .DrawText("DrawingArea2", 200, 200, 20, 20)  
   .End  
 End With  

End  
  

Public Sub Button1_Click()  

 With Printer1  
   .Configure  
   .Orientation = .Portrait
   .Paper = .A4
   .Resolution = Desktop.Resolution
' Imposta il numero delle pagine da stampare:
   .Count = 2
   .GrayScale = False
' .OutputFile = "/tmp/prova.pdf"
   .Print  
 End With  

End  
  

Public Sub Printer1_Draw()  

' Incrementa il numero della pagina da stampare (il numero della prima pagina da stampare non deve essere = 0):
 inc n

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

End
  

Private Procedure Stampa(d As Byte)  

 Dim mx, my, rY, dx, dy As Integer  
 Dim dS As String  

 If d = 1 Then  
   mx = 100  
   my = 100  
   rY = 100  
   dX = 10  
   dY = 10  
   dS = DrawingArea1.Name
 Else  
   mx = 200  
   my = 200  
   rY = 200  
   dX = 200  
   dY = 200  
   dS = DrawingArea1.Name
 Endif  

 With Paint  
   .Begin(Printer1)  
   .Brush = Paint.Color(Color.Red)  
   .MoveTo(mx, my)  
   .RelLineTo(0, rY)  
   .Stroke  
   .DrawText(dS, dX, dY, 20, 20)  
   .End  
 End With  

End


Stampare il contenuto di una DrawingArea mediante le risorse del Componente gb.media

Si potrà stampare il contenuto di una DrawingArea anche mediante le risorse del Componente gb.media:

Private temporaneo As String


Public Sub Button1_Click()

 Dim pl As MediaPipeline
 Dim src, vdc, enc, snk As MediaControl

 temporaneo = Temp

 pl = New MediaPipeline 

 src = New MediaControl(pl, "ximagesrc")
' Assegna alla proprietà "xid" del plugin "ximagesrc" il numero idetificativo della "DrawingArea", affinché ne catturi quanto da essa visualizzato:
 src["xid"] = DrawingArea1.Id
 vdc = New MediaControl(pl, "videoconvert")
 enc = New MediaControl(pl, "pngenc")
 snk = New MediaControl(pl, "filesink")
 snk["location"] = temporaneo

 src.LinkTo(vdc)
 vdc.LinkTo(enc)
 enc.LinkTo(snk)

' Effettua la ripresa dell'immagine:
 pl.Play()
 pl.Stop()
 pl.Close()

 Print "Cattura immagine effettuata"

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

End


Public Sub Printer1_Draw()

 With Paint
   .DrawImage(Image.Load(temporaneo), 0, 0)
   .End
 End With

End


Public Sub DrawingArea1_Draw()

 With Paint
   .DrawImage(Image.Load("/percorso/del/file/immagine"), 0, 0)
   .DrawText("Testo qualsiasi", 200, 100)
   .End
 End With

End


Note

[1] Vedere anche: Generare un file PDF da una DrawingArea.

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