Impresión directa por LPT1

27/06/2005 - 08:55 por Kapsule | Informe spam
Buenos días.

Estoy realizando una aplicación en CSharp la cual imprima directamente por
LPT1. El problema es que tengo un pequeño codigo en VB6 que ya me imprime
pero no se como interpretarlo para CSharp.

Open "lpt1" For Output As #1
Print #1, cabezera
Print #1, separador
Print #1, Cola
Close #1

Gracias.

Preguntas similare

Leer las respuestas

#1 yego
27/06/2005 - 10:17 | Informe spam
Hola Kapsule,
Yo también busqué algo parecido hace ná.
Al final lo que hice, fue utilizar el 'PrintDocument'. Lo resolví haciendo
una clase para imprimir matrices alfanuméricas de 80x40 (80 caracteres por
pagina y 40 registros por página) todo muy mejorable.
No sé si te serviría algo así, si la necesitas te la envío sin ningún
problema.

Saludos.

"Kapsule" escribió en el mensaje
news:
Buenos días.

Estoy realizando una aplicación en CSharp la cual imprima directamente por
LPT1. El problema es que tengo un pequeño codigo en VB6 que ya me imprime
pero no se como interpretarlo para CSharp.

Open "lpt1" For Output As #1
Print #1, cabezera
Print #1, separador
Print #1, Cola
Close #1

Gracias.
Respuesta Responder a este mensaje
#2 Rodrigo Corral [MVP]
27/06/2005 - 10:27 | Informe spam
Este es un ejemplo de como escribir directamente en el puerto:

using System;
using System.IO;
using System.Runtime.InteropServices­;
namespace LPTWrite
{
class LPTWrite
{
[StructLayout(LayoutKind.Seque­ntial)]
private struct SECURITY_ATTRIBUTES
{
public int nLength;
public int lpSecurityDescriptor;
public int bInheritHandle;
}


private const int GENERIC_WRITE = 1073741824;
private const int FILE_SHARE_WRITE = 2;
private const int OPEN_EXISTING = 3;
private const int FILE_ATTRIBUTE_NORMAL = 128;
[DllImport("kernel32.dll")]
private static extern int CreateFile(string lpFileName,int
dwDesiredAccess,int dwShareMode,[MarshalAs(Unmanag­edType.Struct)] ref
SECURITY_ATTRIBUTES lpSecurityAttributes,int dwCreationDisposition,int
dwFlagsAndAttributes,int hTemplateFile);
[STAThread]
static void Main(string[] args)
{
SECURITY_ATTRIBUTES sa = new SECURITY_ATTRIBUTES();
sa.bInheritHandle = 0;
sa.lpSecurityDescriptor = 0;
sa.nLength = Marshal.SizeOf(sa);
int hLPT1 = CreateFile("LPT1", GENERIC_WRITE, FILE_SHARE_WRITE, ref sa,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
FileStream fs = new FileStream((IntPtr)hLPT1, FileAccess.Write );
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("Hola puerto paralelo!!!");
sw.Flush();
fs.Flush();
fs.Close();
}
}
}


Un saludo
Rodrigo Corral González [MVP]

FAQ de microsoft.public.es.vc++
http://rcorral.mvps.org
Respuesta Responder a este mensaje
#3 Tristan
27/06/2005 - 16:22 | Informe spam
¿yego, eso era lo que buscabas?

Pues me hubiese gustado saberlo :-) He dejado varios ejemplos en este foro
sobre como imprimir de forma directa en LPT1. Lamentablemente los streams de
System.IO de .net no soportan dispositivos directamente, pero tal y como
muestra el ejemplo de Rodrigo Corral, se pueden abrir mediante el api win32,
CreateFile.

De todas formas, la solución de PrintDocument tiene varias ventajas, yo
seguiría utilizándola. Entre otras cosas, gestiona el tipo de letra desdel
el OS. Y lo más importante, los caracteres internacionales como la "ñ" o los
acentos, se imprimen correctamente, sin dependencia del juego de caracteres
de la impresora, y sin necesidad de transformaciones.

Por cierto, siempre me ha parecido sorprendente que los streams de .net no
permitan abrir dispositivos especiales. Las betas de .Net si lo admitían. Y
creo que tampoco se admitirá en vs.net 2005. Lo bueno es que al menos, esta
versión, si incluirá clases para manipular los puertos paralelo y serie.

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#4 yego
27/06/2005 - 16:41 | Informe spam
Hola Juan Carlos,
Realmente te agradezco que me aportaras tu consejo, porque realmente, a
largo plazo he visto que me vendrá mejor para cuando necesitemos una versión
definitiva, que tal y como decias, todos esos detalles necesarios para hacer
una impresión, los voy a tener que controlar.

También me alegra oirte decir lo del manejos de los puertos, porque dentro
de poco me veré obligado a utilizarlos, pero eso ya es otro tema.

Saludos.

"Tristan" escribió en el mensaje
news:u3$
¿yego, eso era lo que buscabas?

Pues me hubiese gustado saberlo :-) He dejado varios ejemplos en este foro
sobre como imprimir de forma directa en LPT1. Lamentablemente los streams


de
System.IO de .net no soportan dispositivos directamente, pero tal y como
muestra el ejemplo de Rodrigo Corral, se pueden abrir mediante el api


win32,
CreateFile.

De todas formas, la solución de PrintDocument tiene varias ventajas, yo
seguiría utilizándola. Entre otras cosas, gestiona el tipo de letra desdel
el OS. Y lo más importante, los caracteres internacionales como la "ñ" o


los
acentos, se imprimen correctamente, sin dependencia del juego de


caracteres
de la impresora, y sin necesidad de transformaciones.

Por cierto, siempre me ha parecido sorprendente que los streams de .net no
permitan abrir dispositivos especiales. Las betas de .Net si lo admitían.


Y
creo que tampoco se admitirá en vs.net 2005. Lo bueno es que al menos,


esta
versión, si incluirá clases para manipular los puertos paralelo y serie.

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