Il framework per gestire i servizi correlati alla stampa, ci mette a disposizione il Namespace
System.Drawing.Printing.
Il "cuore" di questo Namespace è la classe
PrintDocument che invia un'output ad una stampante, che può essere testo o grafica. Si può stampare un file di testo inviando al PrintDocument uno
StreamReader, ma in questo articolo analizzeremo come stampare una form con del testo e della grafica nel modo più generale possibile visto che le opzioni e le soluzioni sono molteplici.
Come detto l'oggetto importante per la stampa è il PrintDocument. Se utilizzate Visual Studio .NET basta fare il
Drag&Drop dall'oggetto dalla Toolbar degli strumenti.
Per impostare le proprietà di output si deve gestire l'evento
PrintPage, questo evento è composto da due argomenti:
Private Sub pd_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles pd.PrintPage
Il secondo argomento il
PrintPageEventArgs ha al proprio interno un membro "Graphics" che è un riferimento all'oggetto su cui poter disegnare.
E' proprio attraverso questo oggetto che possiamo "sbizzarrirci" nel disegnare la nostra stampa perché ci consente di accedere a tutti i metodi esposti dalla classe
System.Drawing.Graphics.
Entriamo più in dettaglio:
Per prima cosa importiamo il Namespace utilizzato per stampare:
Imports System.Drawing
Allora per stampare un semplice testo basta richiamare il metodo
DrawString e quindi faremo per esempio:
e.Graphics.DrawString("Stampa di una win form", Me.Font, Brushes.Red, 40, 5)
Il metodo accetta diversi overloading, questo che ho usato accetta questi parametri che andremo ad illustrare:
1) Il testo che si deve stampare("Stampa di una win form")
2) Il Fontda utilizzare, per comodità ho ripreso quello del form(Me.Form)
3) Il colore della scritta(Brushes.Red)
4) Infine le coordinate di dove si vuole scrivere il testo
Come potete notare potete personalizzare il più possibile il vostro testo.
Ma vediamo come poter disegnare nella nostra stampa.
Mettiamo il caso che vogliamo stampare una checkbox che è stata selezionata.
Per prima cosa dobbiamo definire la nostra "matita" creando un oggetto Pen.
Il colore usato è il nero.
Dim penna As New Pen(Color.Black)
Poi devo disegnarmi il mio checkbox e quindi disegnare un rettangolo in questo modo:
e.Graphics.DrawRectangle(penna, check1.Location.X, check1.Location.Y, 16, 16)
Per comodità uso le coordinate della checkbox e inoltre bisogna dargli la larghezza e l?altezza del rettangolo.
Una volta creato il rettangolo bisogna creare all?interno due linee che si incrociano per formare una x e "simulare" la selezione avvenuta.
Quindi faremo la prima riga che parte dall?angolo superiore sinistro e la seconda che parte dall?angolo superiore destro.
e.Graphics.DrawLine(penna, check1.Location.X, check1.Location.Y, check1.Location.X + 16, check1.Location.Y + 16)
e.Graphics.DrawLine(penna, check1.Location.X + 16, check1.Location.Y, check1.Location.X, check1.Location.Y + 16)
Quando si disegna una linea bisogna impostare le coordinate del punto di partenza e le coordinate del punto di arrivo e qui bisogna giocare un pò con gli assi cartesiani.
Poi basta richiamare il metodo
Print e si avvia il processo di stampa
Form di EsempioStampa della FormConclusioniIl Namespace per la stampa in .NET offre diverse funzionalità che ci permettono di soddisfare quasi tutte le nostre esigenze, impostando anche un'anteprima per esempio e/o anche il tipo di stampante.
Per finire questo esempio è interessante (non solo per la stampa) ma anche per scoprire tutte le potenzialità e i metodi offerti dalla classe
Graphics.