none
Salto de Pagina RRS feed

  • Pregunta

  • Hola a todos, tal vez alguien me puede ayudar, estoy realizando una aplicacion con WinForms en VS 2003 y resulta que tengo un documento en papel continuo, el cual debo de imprimir, pero el tamaño de cada hoja es menor al tamaño de la hoja carta, imprimo la informacion que necesito sobre el documento, y al momento de hacer el salto de pagina hala la siguiente pagina hasta en medio, alguien sabe como se imprime en hojas de papel continuo desde VS 2003

     

    P.D.

    Obtengo la info de la base de datos y lo coloco en un archivo de texto, luego leo el archivo de texto y lo mando a imprimir, al momento de realizar este paso, utilizo la clase PaperSize para indicarle de que tamaño es la hoja que voy a imprimir y segun yo, asi iba a realizar correctamente el salto de pagina, pero no funciona como yo espero, este es el codigo que estoy utilizando

     

     

     

    Try

    printFont = New Font("Courier New", 10)

    Dim pd As New PrintDocument

    Dim tamanioPapel As New PaperSize("Doc", 850, 910)

    pd.DefaultPageSettings.PaperSize = tamanioPapel

    AddHandler pd.PrintPage, AddressOf pd_PrintPage

    ' Print the document.

    pd.Print()

    Finally

    rArchivo.Close()

    End Try

     

     

     

    y en la funcion pd_PrintPage es :

    Private Sub pd_PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)

    Dim linesPerPage As Single = 0

    Dim yPos As Single = 0

    Dim count As Integer = 0

    Dim leftMargin As Single = ev.MarginBounds.Left

    Dim topMargin As Single = ev.MarginBounds.Top

    Dim line As String = Nothing

    ' Calculate the number of lines per page.

    linesPerPage = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics)

    ' Iterate over the file, printing each line.

    While count < linesPerPage

    line = rArchivo.ReadLine()

    If line Is Nothing Then

    Exit While

    End If

    yPos = topMargin + count * printFont.GetHeight(ev.Graphics)

    ev.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, _

    yPos, New StringFormat)

    count += 1

    End While

    ' If more lines exist, print another page.

    If Not (line Is Nothing) Then

    ev.HasMorePages = True

    Else

    ev.HasMorePages = False

    End If

    End Sub

     

     

    Gracias por su tiempo

     

     

    jueves, 21 de diciembre de 2006 7:16

Respuestas

  • Por si le sirve a alguien, en otro foro encontre este codigo :

    Public Declare Auto Function CreateFile Lib "kernel32.dll" (ByVal lpFileName As String, ByVal dwDesiredAccess As Integer, ByVal dwShareMode As Integer, ByVal lpSecurityAttributes As IntPtr, ByVal dwCreationDisposition As Integer, ByVal dwFlagsAndAttributes As Integer, ByVal hTemplateFile As IntPtr) As IntPtr

    Const GENERIC_WRITE As Int32 = &H40000000

    Const OPEN_EXISTING As Int32 = 3

    Private Function GetStreamWriter(ByVal port As String) As IO.StreamWriter

    Dim hFich As IntPtr = CreateFile(port, GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero)

    Dim stream As New IO.FileStream(hFich, IO.FileAccess.Write)

    Dim writer As New IO.StreamWriter(stream)

    Return writer

    End Function

    Private Function Prueba()

    Dim fArchivo As IO.StreamWriter = GetStreamWriter("LPT1")

    fArchivo.WriteLine("Linea 1")

    fArchivo.WriteLine("Linea 2")

    fArchivo.Flush()

    fArchivo.Close()

    End Function

    Lo que hace es escribir directamente al LPT1  y uno controla cada linea de impresion, es muy util cuando uno debe de imprimir en formatos preimpresos definidos.

     

    miércoles, 27 de diciembre de 2006 7:44