Differenze tra le versioni di "Stampare in Gambas"

Da Gambas-it.org - Wikipedia.
(Redirect alla pagina Printer)
Riga 1: Riga 1:
#REDIRECT [[Printer]]
+
==Stampare in Gambas==
 +
Per stampare in Gambas si usa l'Oggetto speciale '''[https://gambaswiki.org/wiki/howto/print?l=it Printer]'''.
 +
<BR>Questa classe, creabile, consente di stampare su stampanti o in un file.
 +
<BR>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
 +
<Font Color=gray>' ''opzionale - apre la finestra di dialogo se si vogliono reimpostare tutte le proprietà della stampante:''</font>
 +
    .Configure
 +
<Font Color=gray>' ''opzionale - imposta la modalità di stampa "Verticale" (oppure "Orizzontale"):''</font>
 +
    .Orientation = .Portrait
 +
<Font Color=gray>' ''opzionale - imposta il tipo di carta (A4)'':</font>
 +
    .Paper = .A4
 +
<Font Color=gray>' ''opzionale - imposta la risoluzione di stampa (in DPI), per ottenere il risultato simile a quello che si vede sul monitor''</font>
 +
    .Resolution = Desktop.Resolution
 +
<Font Color=gray>' ''opzionale - in questo caso stampa a colori:''</font>
 +
    .GrayScale = False
 +
<Font Color=gray>' ''Effettua la stampa su foglio:''</font>
 +
    .Print
 +
  End With
 +
 +
End
 +
 +
 +
Public Sub Printer1_Draw()  <Font Color=gray>' ''Questo Evento è richiamato per ogni pagina da stampare.''</font>
 +
 +
<Font Color=gray>' ''In questa routine saranno presenti le informazioni di ciò che si andrà a stampare.''</font>
 +
 +
  With Paint
 +
 
 +
<Font Color=gray>' ''Volendo si può impostare la dimensione del font:''</font>
 +
    .Font.Size = 12
 +
   
 +
<Font Color=gray>' ''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) .''</font>
 +
    .Brush = Paint.Color(Color.DarkBlue)
 +
   
 +
<Font Color=gray>' ''Il testo sarà allineato al quadrilatero "virtuale" posto alle coordinate X, Y e di dimensioni W, H:''</font>
 +
    .DrawText("Riga numero 1", 100, 200)
 +
   
 +
<Font Color=gray>' ''Ma si potrà anche eliminare il riferimento a quelle dimensioni:''</font>
 +
    .DrawText("Riga numero 2", 200, 300)
 +
   
 +
<Font Color=gray>' ''Può essere stampato anche il contenuto di un Controllo di testo:''</font>
 +
    .DrawText(TextLabel1.Text, 300, 400, TextLabel1.W, TextLabel1.H)
 +
   
 +
<Font Color=gray>' ''ATTENZIONE ! Con i metodi .RichText  e .Text occorrerà un ".Fill":''</font>
 +
    .RichText("Testo con RichText", 400, 500)
 +
    .Text("Testo con Text", 500, 600)
 +
    .'''Fill'''
 +
 +
<Font Color=gray>' ''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."''</font>
 +
    .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 <Span Style="text-decoration:underline">creare</span> un file ".pdf"), si dovrà utilizzare la Proprietà ".OutputFile", la quale deve essere posta <SPAN style="text-decoration:underline">prima</span> del Metodo ".Print()".
 +
<BR>Riprendiamo il codice precedente.
 +
Public Sub Button1_Click()
 +
 +
  With Printer1
 +
<Font Color=gray>' ''opzionale - apre la finestra di dialogo, se si vogliono impostare le proprietà della stampante:''</font>
 +
    .Configure
 +
    .Orientation = .Portrait
 +
<Font Color=gray>' ''Imposta ad esempio la stessa risoluzione in DPI dello schermo:''</font>
 +
    .Resolution = Desktop.Resolution
 +
    .Paper = .A4
 +
<Font Color=gray>' ''stampa su un file .pdf, ossia: crea un file .pdf:''</font>
 +
    <FONT color=#B22222><B>.OutputFile</b></font> = <FONT color=#B22222>"</font>''/percorso/mio/file.pdf''<FONT color=#B22222>"</font>
 +
<Font Color=gray>'....''OutputFile, deve essere posto <SPAN style="text-decoration:underline">prima</span> di .Print.''
 +
' ''Il Metodo ".Print()" va comunque previsto, ma in questo caso non stamperà su carta.''</font>
 +
    .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 <SPAN style="text-decoration:underline">una sola</span> 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.<FONT color=#B22222>Count =</font> 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 <SPAN style="text-decoration:underline">più</span> di una pagina.
 +
 
 +
 
 +
==Stampare più copie==
 +
Per stampare più <SPAN style="text-decoration:underline">copie</span> 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
 +
    <FONT color=#B22222>.NumCopies =</font> 4
 +
    .Print
 +
  End With
 +
 +
End
 +
 +
etc....etc....
 +
 
 +
 
 +
==Stampare un file PDF==
 +
Al riguardo rinviamo a questa pagina della wiki: [[Stampare un file PDF]]

Versione delle 15:46, 12 ott 2023

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