Imprimir texto plano

21/07/2004 - 12:04 por Gustavo | Informe spam
Hola a todos.

Estoy imprimiendo un fichero de texto plano.
Desde VB.NET genero este fichero y luego lo mando imprimir.

Me gustaría saber como puedo hacer para imprimir el texto plano directamente
desde VB.NET. Esto es, de una forma no gráfica y sin generar un fichero.

Gracias y un saludo.


Gus.

Preguntas similare

Leer las respuestas

#1 Misael Monterroca
21/07/2004 - 16:26 | Informe spam
utiliza la clase PrintDocument, de hecho en la misma documentación de la
clase viene un ejemplo de lo que quieres hacer.

Saludos!
http://cacho.zapto.org/blog




"Gustavo" wrote in message
news:%
Hola a todos.

Estoy imprimiendo un fichero de texto plano.
Desde VB.NET genero este fichero y luego lo mando imprimir.

Me gustaría saber como puedo hacer para imprimir el texto plano


directamente
desde VB.NET. Esto es, de una forma no gráfica y sin generar un fichero.

Gracias y un saludo.


Gus.


Respuesta Responder a este mensaje
#2 Gustavo
22/07/2004 - 19:05 | Informe spam
Realmente lo que quiero hacer es enviar un comando a la impresora, no
imprimir un informe.
De hecho es algo que se podría hacer desde una aplicación de consola sin
componentes visuales.

Quiero enviar un comando a un puerto, en este caso a LPT1.

¿Podrías ser un poco más específico de que ejemplo puedo seguir?

Gracias.

Gus.

"Misael Monterroca" escribió en el mensaje
news:
utiliza la clase PrintDocument, de hecho en la misma documentación de la
clase viene un ejemplo de lo que quieres hacer.

Saludos!
http://cacho.zapto.org/blog




"Gustavo" wrote in message
news:%
> Hola a todos.
>
> Estoy imprimiendo un fichero de texto plano.
> Desde VB.NET genero este fichero y luego lo mando imprimir.
>
> Me gustaría saber como puedo hacer para imprimir el texto plano
directamente
> desde VB.NET. Esto es, de una forma no gráfica y sin generar un fichero.
>
> Gracias y un saludo.
>
>
> Gus.
>
>


Respuesta Responder a este mensaje
#3 Misael Monterroca
22/07/2004 - 19:11 | Informe spam
Te comentaba que en la documentación venia un ejemplo de lo que comentabas
incialmente, aqui te lo dejo.

Public Class PrintingExample
Inherits System.Windows.Forms.Form
Private components As System.ComponentModel.Container
Private printButton As System.Windows.Forms.Button
Private printFont As Font
Private streamToPrint As StreamReader

Public Sub New()
' The Windows Forms Designer requires the following call.
InitializeComponent()
End Sub

' The Click event is raised when the user clicks the Print button.
Private Sub printButton_Click(sender As Object, e As EventArgs)
Try
streamToPrint = New StreamReader("C:\My Documents\MyFile.txt")
Try
printFont = New Font("Arial", 10)
Dim pd As New PrintDocument()
AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage
pd.Print()
Finally
streamToPrint.Close()
End Try
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub

' The PrintPage event is raised for each page to be printed.
Private Sub pd_PrintPage(sender As Object, 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)

' Print each line of the file.
While count < linesPerPage
line = streamToPrint.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


' The Windows Forms Designer requires the following procedure.
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Me.printButton = New System.Windows.Forms.Button()

Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(504, 381)
Me.Text = "Print Example"

printButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft
printButton.Location = New System.Drawing.Point(32, 110)
printButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat
printButton.TabIndex = 0
printButton.Text = "Print the file."
printButton.Size = New System.Drawing.Size(136, 40)
AddHandler printButton.Click, AddressOf printButton_Click

Me.Controls.Add(printButton)
End Sub

' This is the main entry point for the application.
Public Shared Sub Main()
Application.Run(New PrintingExample())
End Sub

End Class


Saludos!
http://cacho.zapto.org/blog




"Gustavo" wrote in message
news:
Realmente lo que quiero hacer es enviar un comando a la impresora, no
imprimir un informe.
De hecho es algo que se podría hacer desde una aplicación de consola sin
componentes visuales.

Quiero enviar un comando a un puerto, en este caso a LPT1.

¿Podrías ser un poco más específico de que ejemplo puedo seguir?

Gracias.

Gus.

"Misael Monterroca" escribió en el


mensaje
news:
> utiliza la clase PrintDocument, de hecho en la misma documentación de la
> clase viene un ejemplo de lo que quieres hacer.
>
> Saludos!
> http://cacho.zapto.org/blog
>
>
>
>
> "Gustavo" wrote in message
> news:%
> > Hola a todos.
> >
> > Estoy imprimiendo un fichero de texto plano.
> > Desde VB.NET genero este fichero y luego lo mando imprimir.
> >
> > Me gustaría saber como puedo hacer para imprimir el texto plano
> directamente
> > desde VB.NET. Esto es, de una forma no gráfica y sin generar un


fichero.
> >
> > Gracias y un saludo.
> >
> >
> > Gus.
> >
> >
>
>


Respuesta Responder a este mensaje
#4 Tristan
22/07/2004 - 21:29 | Informe spam
Bueno, no veo la diferencia entre una aplicación de consola y una windows,
de cara a eso. En realidad, una aplicación windows es básicamente idéntica a
una de consola, excepto que no crea ni muestra la consola. ¿O te refieres a
redireccionar la salida hacia lpt1?.

Por lo demás para enviar texto directamente a la impresora, cosa que siempre
se debería evitar siempre que sea posible, debes obtener un stream al
puerto. Para eso de momento, debes utilizar el api win32 CreateFile:

Dim lpt1 As StreamWriter = GetStreamWriter("LPT1")
lpt1.WriteLine("Texto directo")
lpt1.Close()


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 StreamWriter
Dim hFich As IntPtr = CreateFile("LPT1", GENERIC_WRITE, 0, IntPtr.Zero,
OPEN_EXISTING, 0, IntPtr.Zero)
Dim stream As New FileStream(hFich, FileAccess.Write)
Dim writer As New StreamWriter(stream)
writer.WriteLine("Texto impreso")
Return writer
End Function

Juan Carlos Badiola
MVP - C#
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida