Ho sviluppato una applicazione per la fatturazione delle vendite.

Per creare le fatture utilizzo il componente PrintDocument.
Ho una form contenente un PrintDocument, un PrintPreviewDialog, due Button (Anteprima / Stampa Diretta) e un datagridview contenente i dati delle vendite.

Il problema è che durante la visualizzazione dell'anteprima tutto funziona correttamente, durante la stampa no.

Codice di Anteprima:

codice:
Try

'Avvia l'anteprima
PrintDocument1.DefaultPageSettings.Landscape = False    ' orientamento 
PrintPreviewDialog1.Document = PrintDocument1
PrintPreviewDialog1.Width = My.Computer.Screen.WorkingArea.Width
PrintPreviewDialog1.Height = My.Computer.Screen.WorkingArea.Height
PrintPreviewDialog1.ShowDialog()
PrintPreviewDialog1.Top = True

Catch ex As Exception

'Gestione dell'errore
LocalError("Button4_Click")

End Try


Codice di PrintDocument1_PrintPage

codice:
Try
'Caratteri disponibili
'Regular = Grassetto
Dim drawFont00 As New Font("Verdana", 6, FontStyle.Regular)          '6pt
'Bold = Grassetto
Dim drawFont100 As New Font("Verdana", 8, FontStyle.Bold)           '8pt
'Italic = Corsivo
Dim drawFont200 As New Font("Verdana", 8, FontStyle.Italic)         '8pt

'INTESTAZIONE DI PAGINA
'Dati aziendali:
... (Tutto funziona)

'Caratteristiche del documento:
'Disegno un rettangolo
e.Graphics.DrawRectangle(Pens.Black, e.MarginBounds.Left, 210, e.MarginBounds.Size.Width, 36)

'1.Tipo documento
Dim Caratteristiche As String = "TIPO DOCUMENTO" & vbCrLf & Documento
e.Graphics.DrawString(Caratteristiche, drawFont100 , Brushes.Black, e.MarginBounds.Left, 213)
... (Tutto funziona)
                                  
'Intestazione di colonne:
... (Tutto funziona)

(Il Corpo funziona solo a video, quando devo stamapre non stampa niente)
'Corpo del documento:
'-------------------------------------------------------------------------------
'Valori di documento
Dim TotValore, TotIva, TotQuantita, TotSconto1, TotSconto2, TotSconto3 As Double

'Questa variabile contiene la posizione nel dataset
Static z As Integer 

'In questa invece si mette la posizione di stampa della prima riga dei dati
Dim Y As Integer = 330                                                              
      
'Inizio a ciclare le righe contenute nel datagridview  (Ho semplificato per l'esempi)

'In questo punto decido quanti record inserire in ogni pagina (in questo caso 50 ognuna)
For z = 0 To z + 50    

If z < Dw.Count Then
                                                                                 
'Quantità
e.Graphics.DrawString(FormatNumber(Dw.Item(z).Item(19).ToString, 2), drawFont00, Brushes.Black, e.MarginBounds.Left + 256, Y)
                    
'Prezzo
e.Graphics.DrawString(FormatNumber(Dw.Item(z).Item(20).ToString, 2)
, drawFont00, Brushes.Black, e.MarginBounds.Left + 310, Y)
                                    
e.HasMorePages = True                                                   
'Permetto di stampare la pagina successiva
 
Else

e.HasMorePages = False                                                                           
 
End If

Next z

'Fine del documento
(..Tutto funziona correttamente)
            
Catch ex As Exception
       
'Gestione dell'errore  
LocalError("PrintDocument1_PrintPage")

End Try
Come mai a video funziona tutto alla perfezione ma nel momento in cui lancio da stampa,
che essa sia diretta o attraverso l'anteprima vengono stampati tutti i caratteri correttamente tranne tutti quelli contenuti nel ciclo for..next z