Stampare in Gambas

Da Gambas-it.org - Wikipedia.

Stampare in Gambas

Per stampare in Gambas si usa l'Oggetto speciale Printer.
Questa classe, creabile, consente di stampare su stampanti o in un file.
La stampa viene gestita con l'Evento "_Draw()" (come se si dovesse disegnare su una "DrawingArea").

Esempio (inseriamo sul form l'oggetto speciale "Printer" e scriviamo il seguente codice):

Public Sub Button1_Click()

 With Printer1
' opzionale - apre la finestra di dialogo se si vogliono reimpostare tutte le proprietà della stampante:
   .Configure
' opzionale - imposta la modalità di stampa "Verticale" (oppure "Orizzontale"):
   .Orientation = .Portrait
' opzionale - imposta il tipo di carta (A4):
   .Paper = .A4
' opzionale - imposta la risoluzione di stampa (in DPI), per ottenere il risultato simile a quello che si vede sul monitor
   .Resolution = Desktop.Resolution
' opzionale - in questo caso stampa a colori:
   .GrayScale = False
' Effettua la stampa su foglio:
   .Print
 End With

End


Public Sub Printer1_Draw()   ' Questo Evento è richiamato per ogni pagina da stampare.

' In questa routine saranno presenti le informazioni di ciò che si andrà a stampare.

 With Paint
 
' Volendo si può impostare la dimensione del font:
   .Font.Size = 12
   
' Si può anche impostare il colore del testo: in questo caso a blu scuro.
' Se si intende usare il codice, sarà in esad. ad esempio: = Paint.Color(&H001F007F); ' in decimale: = Paint.Color(2031743) .
   .Brush = Paint.Color(Color.DarkBlue)
   
' Il testo sarà allineato al quadrilatero "virtuale" posto alle coordinate X, Y e di dimensioni W, H:
   .DrawText("Riga numero 1", 100, 200)
   
' Ma si potrà anche eliminare il riferimento a quelle dimensioni:
   .DrawText("Riga numero 2", 200, 300)
   
' Può essere stampato anche il contenuto di un Controllo di testo:
   .DrawText(TextLabel1.Text, 300, 400, TextLabel1.W, TextLabel1.H)
   
' ATTENZIONE ! Con i metodi .RichText  e .Text occorrerà un ".Fill":
   .RichText("Testo con RichText", 400, 500)
   .Text("Testo con Text", 500, 600)
   .Fill

' Si può anche ruotare il contenuto, da stampare, degli oggetti (in questo esempio di 45°). Poiché il Metodo ".Rotate()" richiede che gli sia passato un valore espresso in "Radianti", si potrà utilizzare in questo esempio la funzione "Rad()", per convertire i gradi in radianti.
' Il Metodo ".Translate() aggiusta la posizione del testo ruotato."
   .Translate(101, 202)
   .Rotate(Rad(45))
   .DrawText("Riga numero 1 ruotata di 45°", 0, 0)

   .End

 End With

End

E' possibile anche stampare un'immagine mediante il Metodo "Paint.DrawImage()"


Stampare in un file .pdf

Se si intende stampare su un file ".pdf" (e quindi in sostanza creare un file ".pdf"), si dovrà utilizzare la Proprietà ".OutputFile", la quale deve essere posta prima del Metodo ".Print()".
Riprendiamo il codice precedente.

Public Sub Button1_Click()

 With Printer1
' opzionale - apre la finestra di dialogo, se si vogliono impostare le proprietà della stampante:
   .Configure
   .Orientation = .Portrait
' Imposta ad esempio la stessa risoluzione in DPI dello schermo:
   .Resolution = Desktop.Resolution
   .Paper = .A4
' stampa su un file .pdf, ossia: crea un file .pdf:
   .OutputFile = "/percorso/mio/file.pdf"
'....OutputFile, deve essere posto prima di .Print.
' Il Metodo ".Print()" va comunque previsto, ma in questo caso non stamperà su carta.
   .Print
 End With

End

In tali casi la Proprietà ".Paper" dell'oggetto Printer può passare, senza che l'utente l'abbia previsto, dal valore 2 (A4) a 0 (Custom). A questo riguardo Minisini ha fatto notare che la regola è: se si modifica la destinazione dell'Oggetto Printer, potrebbe essere necessario ridefinire le sue Proprietà. Una modifica della destinazione, come in questo caso, di Printer ripristina le sue Proprietà ai valori predefiniti solitamente associati al Printer nuovo.


Stampare un documento formato da più pagine

Qualora il documento da stampare sia formato da più pagine, bisognerà richiamare ed impostare la Proprietà ".Count" all'interno dell'Evento "_Begin()" dell'Oggetto Printer.

La Proprietà ".Count" dice quante pagine ci sono in una copia del documento. Se la Proprietà ".Count" non viene specificata, sarà stampata una sola pagina.

La procedura della stampa di più pagine prevede che al termine della stampa di una pagina - ossia alla fine dell'Evento "_Draw()" - l'Evento "_Draw()" venga abbandonato, e successivamente venga sollevato di nuovo automaticamente.

Poniamo il caso di voler stampare 20 pagine aventi contenuto diverso:

Private b As Byte


Public Sub Button1_Click()

 With Printer1
   .Configure
   .Orientation = .Portrait
   .GrayScale = False
   .Paper = .A4
   .Print
 End With

End


Public Sub Printer1_Begin()
 
 Printer1.Count = 20
 
End


Public Sub Printer1_Draw()

  Inc b

  With Paint
    .Font.Size = 18
    .Brush = Paint.Color(Color.Red)
    .DrawText("Pagina " & CStr(b), 500, 1000, 400, 600)
  End With

End

Inoltre, impostando la suddetta Proprietà ".Count" dell'Oggetto Printer ed aggiungendo a tale oggetto la nota Proprietà ".OutputFile", si potrà creare un documento PDF avente più di una pagina.


Stampare più copie

Per stampare più copie di una medesima o di più medesime pagine, bisognerà utilizzare la Proprietà ".NumCopies" dell'Oggetto Printer.

Public Sub Button1_Click()

 With Printer1
   .Configure
   .Orientation = .Portrait
   .Paper = .A4
   .NumCopies = 4
   .Print
 End With

End

etc....etc....


Stampare un file PDF

Al riguardo rinviamo a questa pagina della wiki: Stampare un file PDF