Bueno ahora si recién uso este control por lo cual el código que les mostraré lo encontré por Internet y lo que mas o menos entendí lo modifiqué a mi gusto.
Código vb:
Ver original
Sub RellenarEsp(ByVal str As String, ByVal columna As Int32) Dim r As Int32 Dim cad As String = "" Dim digito As Int32 ncadena = "" Dim numcif As Int32 = str.Length Select Case columna Case 0 : digito = 12 Case 1 : digito = 12 Case 2 : digito = 12 End Select If numcif > digito Then ncadena = Mid(str, 1, digito) Else For r = 1 To (digito - numcif) cad = " " ncadena = ncadena & cad Next ncadena = str & ncadena End If End Sub Sub RellenarEsp2(ByVal str As String, ByVal columna As Int32) Dim r As Int32 Dim cad As String = "" Dim digito As Int32 ncadena = "" Dim numcif As Int32 = str.Length Select Case columna Case 0 : digito = 12 Case 1 : digito = 12 Case 2 : digito = 12 Case 3 : digito = 12 Case 4 : digito = 12 End Select If numcif > digito Then ncadena = Mid(str, 1, digito) Else For r = 1 To (digito - numcif) cad = " " ncadena = ncadena & cad Next ncadena = str & ncadena End If End Sub Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim linesPerPage As Single = 0 Dim yPos As Single = 0 Dim leftMargin As Single = 30 Dim topMargin As Single = e.MarginBounds.Top - 50 Dim line As String = Nothing linesPerPage = e.MarginBounds.Height / printFont.GetHeight(e.Graphics) Dim Fil, Col As Int32 Dim LString As String = "" LString = LString & "Contabilidad Mensual " & vbCrLf & vbCrLf & vbCrLf LString = LString & "Fecha de impresión: " & Today & vbCrLf & vbCrLf & vbCrLf & _ "------------------------------------------------------------------------------------------------" & vbCrLf & vbCrLf & vbCrLf LString = LString & "Estadías: " & ComboBox2.Text & "" & vbCrLf & vbCrLf & vbCrLf LString = LString & "Tipo Habitación Total" & vbCrLf & vbCrLf count = 0 For Fil = 0 To DataGridView2.Rows.Count - 1 For Col = 0 To DataGridView2.Columns.Count - 1 Call RellenarEsp(DataGridView2.Item(Col, Fil).Value.ToString, Col) LString = LString & ncadena & Space(3) Next count += 1 LString = LString & vbCrLf Next LString = LString & "" & vbCrLf LString = LString & "Total: " & TextBox3.Text & "" & vbCrLf & vbCrLf & vbCrLf & _ "------------------------------------------------------------------------------------------------" & vbCrLf & vbCrLf & vbCrLf LString = LString & "Reservas: " & ComboBox3.Text & "" & vbCrLf & vbCrLf & vbCrLf LString = LString & "Tipo Habitación Depósito Efectivo Total" & vbCrLf & vbCrLf count = 0 For Fil = 0 To DataGridView1.Rows.Count - 1 For Col = 0 To DataGridView1.Columns.Count - 1 Call RellenarEsp2(DataGridView1.Item(Col, Fil).Value.ToString, Col) LString = LString & ncadena & Space(3) Next count += 1 LString = LString & vbCrLf Next LString = LString & "" & vbCrLf LString = LString & "Depósitos: " & TextBox1.Text & "" & vbCrLf LString = LString & "Efectivo: " & TextBox2.Text & "" & vbCrLf LString = LString & "Total: " & TextBox4.Text & "" yPos = topMargin + (count * printFont.GetHeight(e.Graphics)) e.Graphics.DrawString(LString, printFont, Brushes.Black, leftMargin, yPos, New StringFormat()) If Not (line Is Nothing) Then e.HasMorePages = True Else e.HasMorePages = False End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If DataGridView2.Rows.Count > 0 And DataGridView1.Rows.Count > 0 Then Try printFont = New Font("Courier new", 11) PrintPreviewDialog1.StartPosition = FormStartPosition.CenterParent PrintPreviewDialog1.Width = 600 PrintPreviewDialog1.Height = 700 PrintPreviewDialog1.ShowDialog() Catch ex As Exception MessageBox.Show(ex.Message) End Try End If End Sub
A lo que hago click en el botón se muestra la vista previa. Para probarlo por completo puse varios datos a ver si mostraba mas hojas pero solo me muestra una sin terminar.
Aquí una imagen para que entiendan mejor.
![](http://img28.imageshack.us/img28/1272/asdvq.jpg)
Espero puedan ayudarme para que la hoja se corte a la misma altura de arriba y continúe en la siguiente hoja aunque la altura en la parte de arriba de la hoja cuando se corta es mucha pero con poco datos se ve bien. Y por si acaso hay forma de poner una imagen en la esquina superior derecha y una en la esquina superior izquierda? Hay forma? Aunque si no se puede no hay problema solo sería para diseño.
Gracias por su atención.
Saludos.