Printer

Da Gambas-it.org - Wikipedia.

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 come se si dovesse disegnare su una DrawingArea.

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

' Gambas 3 class file


Public Sub Button1_Click()

 With Printer1
   .Configure	' opzionale - apre la finestra di dialogo se si vuole impostare la stampante.
   .Orientation = 0	' opzionale - (oppure: Printer1.Portrait) imposta la modalità di stampa "Verticale" (oppure "Orizzontale").
   .Paper = 2	' opzionale - imposta il tipo di carta ( 2 = A4)
   .Resolution = ......   ' opzionale - imposta la risoluzione di stampa (in DPI), per ottenere il risultato simile a quello che si vede sul monitor
   .Print        ' effettua la stampa su foglio
 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 = 20

' si può anche ruotare il contenuto, che sarà stampato, degli oggetti (in questo caso di 45°).
' (Se si intende usare i radianti, sarà: .Rotate(Pi(0.25)). )
 .Rotate(45)
 
' 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("Stampa su foglio", 500, 1000, 400, 500)

' Ma si potrà anche eliminare il riferimento a quelle dimensioni:
 .DrawText("Stampa su foglio", 600, 1200)

' Può essere stampato anche il contenuto di una TextLabel:
 .DrawText(TextLabel1.Text, 300, 7000, 4000, 4000)

' ATTENZIONE ! Con i metodi .RichText  e .Text occorrerà un ".Fill":
   .RichText("Testo con RichText", 200, 20, 100, 100)
   .Text("Testo con Text", 100, 10, 100, 100)
   .Fill

End With

End


E' ovviamente possibile anche stampare un'immagine mediante "Paint.DrawImage"


[modifica] Stampare in un file .pdf o .ps

Se si intende stampare su un file .pdf o .ps, la prima routine sarà così:

Public Sub Button1_Click()

 With Printer1
   .Configure
   .Orientation = 0
   .Paper = 2
' stampa/crea un file .pdf o .ps:
   .OutputFile = "/percorso/miaStampa.pdf"
'....OutputFile, deve essere posto prima di .Print.
 '.Print va comunque previsto, ma in questo caso non stamperà su carta.
   .Print
 End With

End

etc... etc...


[modifica] Stampare più pagine

È possibile specificare il numero di pagine da stampare prima di chiamare il metodo Print() con l'oggetto "Printer".

Se non si conosce il numero delle pagine da stampare, cioè se non si definisce la proprietà .Count prima di chiamare Print(), allora verrà sollevato l'evento Paginate in modo da poter impaginare il documento in background, ossia fino a quando la proprietà .Count non sarà esplicitamente in esso definita. Se la proprietà .Count non viene specificata, il numero di pagine che saranno stampate è: 1 .

Ad ogni modo, se si devono stampare più pagine, bisogna impostare la proprietà .Count .

Poniamo il caso di voler stampare 5 pagine:

Public Sub Button1_Click()

 With Printer1
   .Configure
   .Orientation = 0
   .Paper = 2
   .Resolution = ......
   .Count = 5
   .Print
 End With

End

etc... etc...


[modifica] Impostare l'oggetto Printer da codice

E' ovviamente possibile creare direttamente da codice l'oggetto "Printer".
Poiché "Printer" è un oggetto come ogni altro, bisogna ricordare (nel caso di sua dichiarazione da codice) di specificare il nome dell'evento, se si desidera catturare gli eventi sollevati dall'oggetto "Printer".

In questo modo:

Private oggPrint As Printer


Public Sub Form_Open()

' Creiamo l'oggetto "Printer" e lo associamo alla denominazione del proprio evento:
  oggPrint = New Printer As "stampa"

If oggPrint.Configure() = True Then Return

 With oggPrint
   .FirstPage = 0
   .Orientation = 1
   .Paper = 2
   .Print
 End With
 
End


Public Sub stampa_Draw()

With Paint
.DrawText("Imprimatur", 500, 1000, 400, 500)
.RichText(String.Chr(&1D11E), 600, 2000, 200, 200)
.Fill
.End
End With

End


oppure in quest'altro modo:

Private oggPrint As New Printer


Public Sub Form_Open()

' Associamo l'oggetto "Printer" alla denominazione del proprio evento:
  Object.Attach(oggPrint, Me, "stampa")

If oggPrint.Configure() = True Then Return

 With oggPrint
   .FirstPage = 0
   .Orientation = 1
   .Paper = 2
   .Print
 End With
 
End


Public Sub stampa_Draw()

With Paint
.DrawText("Imprimatur", 500, 1000, 400, 500)
.RichText(String.Chr(&1D11E), 600, 2000, 200, 200)
.Fill
.End
End With

End
Strumenti personali