codice:
Public codApp_DT As New DataTable
Public anteprimaStampa As New DataTable
Public indiceStorico As Integer
Public indiceCodApp As Integer
Public Pagina As Integer
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage 'Questo è il contenuto della pagina che verrà stampato
Static s_codApp As String
'Static indiceCodApp As Integer
'Static indiceStorico As Integer
Dim TotPreu As Double
Dim TotAAms As Double
Dim TotLordo As Double
Dim TotNetto As Double
Dim TotMN As Double
'DICHIARAZIONI GENERALI
Dim Font1 As New Font("Arial Black", 18) 'Creo i font necessari
Dim Font2 As New Font("Arial", 18, FontStyle.Bold)
Dim Font3 As New Font("Arial", 12, FontStyle.Bold)
Dim Font4 As New Font("Arial", 12)
'Static i As Integer 'Questa variabile contiene la posizione nel dataset
'Dim Up_Int As Integer = 50 'Intestazione foglio
Dim Y As Integer = 180 'In questa invece si mette la posizione di stampa della prima riga dei dati. ATTENZIONE Questa variabile NON deve essere statica, altrimenti i dati vengo progressivamente stampati più in basso, fino a uscire dal foglio
Dim X As Integer = 110
Dim rigaMax As Integer = 350
Dim rigaCorrente As Integer = 110
'Dim str As String 'In questa variabile inserisco il valore della cella del dataset
'Static Pagina As Integer 'In questa registro il numero di pagina corrente
'Totale definitivo
'Spaziature
Dim tabPreu As Integer = 50
Dim tabAams As Integer = 140
Dim tabLordo As Integer = 220
Dim tabNetto As Integer = 330
Dim tabMn As Integer = 410
Dim tabPerRif As Integer = 500
'****************************************************************************************
'INTESTAZIONE DEL DOCUMENTO
'e.Graphics.DrawImage(Image.FromFile(Application.StartupPath & "\Marchio.jpg"), 50, 50, 150, 150) 'Se voglio rappresentare un'immagine. Per esempio il marchio della ditta
e.Graphics.DrawString("REPORT", Font1, Brushes.Black, 330, 50) 'Se voglio inserire una stringa con un testo
e.Graphics.DrawLine(Pens.Red, 50, 50 + 35, 750, 50 + 35) 'Per visualizzare un elemento grafico
codApp_DT = Me.Tab_prodTableAdapter.GetData() 'carico tutti i dati di Apparati
Dim nCodApp As Integer = codApp_DT.Rows.Count 'Verifico il numero degli apparati
'If rigaCorrente < rigaMax Then
For Me.indiceCodApp = indiceCodApp To nCodApp - 1
s_codApp = codApp_DT.Rows.Item(indiceCodApp).Item(0) 'memorizzo
Dim nomeApp As String = codApp_DT.Rows.Item(indiceCodApp).Item(2)
anteprimaStampa = Me.Tab_storicoTableAdapter.GetData_UltimoCalcolo_codApp(s_codApp)
Dim nRecord As Integer = anteprimaStampa.Rows.Count
For rigaCorrente = rigaCorrente To rigaMax
e.Graphics.DrawString(nomeApp, Font2, Brushes.Black, 50, rigaCorrente) 'Queste sono le varie voci delle intestazioni di colonna
rigaCorrente = rigaCorrente + 30
e.Graphics.DrawString("PREU", Font3, Brushes.Black, tabPreu, rigaCorrente)
e.Graphics.DrawString("AAMS", Font3, Brushes.Black, tabAams, rigaCorrente)
e.Graphics.DrawString("LORDO", Font3, Brushes.Black, tabLordo, rigaCorrente)
e.Graphics.DrawString("NETTO", Font3, Brushes.Black, tabNetto, rigaCorrente)
e.Graphics.DrawString("MN", Font3, Brushes.Black, tabMn, rigaCorrente)
e.Graphics.DrawString("Periodo Riferimento", Font3, Brushes.Black, tabPerRif, rigaCorrente)
rigaCorrente = rigaCorrente + 20
For Me.indiceStorico = indiceStorico To nRecord - 1
If rigaCorrente < rigaMax Then
Dim s_preu As String = anteprimaStampa.Rows.Item(indiceStorico).Item(9).ToString
e.Graphics.DrawString(s_preu, Font4, Brushes.Black, tabPreu, rigaCorrente)
Dim s_aams As String = anteprimaStampa.Rows.Item(indiceStorico).Item(11).ToString
e.Graphics.DrawString(s_aams, Font4, Brushes.Black, tabAams, rigaCorrente)
Dim s_lordo As String = anteprimaStampa.Rows.Item(indiceStorico).Item(12).ToString
e.Graphics.DrawString(s_lordo, Font4, Brushes.Black, tabLordo, rigaCorrente)
Dim s_netto As String = anteprimaStampa.Rows.Item(indiceStorico).Item(14).ToString
e.Graphics.DrawString(s_netto, Font4, Brushes.Black, tabNetto, rigaCorrente)
Dim s_mn As String = anteprimaStampa.Rows.Item(indiceStorico).Item(16).ToString
e.Graphics.DrawString(s_mn, Font4, Brushes.Black, tabMn, rigaCorrente)
Dim s_perRif As String = anteprimaStampa.Rows.Item(indiceStorico).Item(18).ToString
e.Graphics.DrawString(s_perRif, Font4, Brushes.Black, tabPerRif, rigaCorrente)
rigaCorrente = rigaCorrente + Font4.GetHeight 'Incremento il valore di Y in modo da stampare la riga seguente sotto la precedente
TotPreu = TotPreu + s_preu
TotAAms = TotAAms + s_aams
TotLordo = TotLordo + s_lordo
TotNetto = TotNetto + s_netto
TotMN = TotMN + s_mn
e.HasMorePages = True 'Permetto di stampare la pagina successiva
'Else
' e.HasMorePages = False 'Blocco la stampa
End If
Next indiceStorico
indiceStorico = 0
If rigaCorrente < rigaMax Then 'Quando i supera il numero di record da stampare (vuol dire che questi sono finiti), allora stampo il totale
rigaCorrente = rigaCorrente + 10
e.Graphics.DrawLine(Pens.Black, 50, (rigaCorrente), 720, (rigaCorrente)) 'Tiro la linea di somma
'e.Graphics.DrawString("TOTALE ", Font3, Brushes.Black, 580, (Y + 20)) 'La scritta Totale
rigaCorrente = rigaCorrente + 10
e.Graphics.DrawString(TotPreu, Font3, Brushes.Black, tabPreu, (rigaCorrente)) 'E lo stampo
e.Graphics.DrawString(TotAAms, Font3, Brushes.Black, tabAams, (rigaCorrente))
e.Graphics.DrawString(TotLordo, Font3, Brushes.Black, tabLordo, (rigaCorrente))
e.Graphics.DrawString(TotNetto, Font3, Brushes.Black, tabNetto, (rigaCorrente))
e.Graphics.DrawString(TotMN, Font3, Brushes.Black, tabMn, (rigaCorrente))
e.HasMorePages = True
End If
rigaCorrente = rigaCorrente + 50
Next
'Else
' e.HasMorePages = False
'End If
Next
If Me.indiceCodApp = nCodApp Then
e.HasMorePages = False 'Blocco la stampa
End If
'****************************************************************************************
'PIE' DI PAGINA DEL DOCUMENTO
e.Graphics.DrawLine(Pens.Red, 50, 1060, 750, 1060) 'Per visualizzare un elemento grafico
Pagina += 1 'Incremento il numero di pagina
e.Graphics.DrawString("Pagina " & Pagina, Font2, Brushes.Black, 600, 1080)
'e.Graphics.DrawString("Valore della pagina " & Parziale, Font2, Brushes.Black, 50, 850)
'Incrementale += Parziale
'e.Graphics.DrawString("Subtotale " & Incrementale, Font2, Brushes.Black, 50, 900)
End Sub
ho usato come limite della pagina il numero di righe, anche se non so se è del tutto corretto dal momento che i caratteri che scrivo hanno dimensione diversa.