Imprimir directamente en una impresora matricial ESPON

28/04/2005 - 19:26 por Oriol | Informe spam
Hola a todos,

Estoy desarrollando una aplicacion Winforms en C# y estoy intentando
imprimir de forma directa a una impresora matricial EPSON. Digo de forma
directa porque no puedo pasar por CrystalReports y necesito hacerlo asi.

He encontrado ejemplos que utilizan algun sistema como la "winspool.drv" y
otros con System.Drawing, pero no consigo imprimir correctamente. Debo
definir un tamaño un poco no estandar (no es un A4 ni folio) y ademas,
rellenar unos campos del impreso que estan en posiciones concretas.

Me interesaria saber como puedo imprimir una pagina directamente en una
EPSON matricial (que supongo que ira en filas y columnas aun y no con puntos
o dots).

Cualquier ayuda sera bienvenida, y si tienen algun ejemplo de como hacerlo,
seria de gran ayuda.

Gracias de antemano.

Saludos,
Oriol Sala.

Preguntas similare

Leer las respuestas

#1 Juan Carlos
28/04/2005 - 20:32 | Informe spam
Mira la siguiente pagina

Te comento a mi no me funciona si mando desde Win 98

Pero si te funciona me comentas

Este articulo te servira, en xp funciona muy bien

http://support.microsoft.com/defaul...cid=kb;EN-
US;322091

Suerte
Juan Carlos S

Hola a todos,

Estoy desarrollando una aplicacion Winforms en C# y


estoy intentando
imprimir de forma directa a una impresora matricial


EPSON. Digo de forma
directa porque no puedo pasar por CrystalReports y


necesito hacerlo asi.

He encontrado ejemplos que utilizan algun sistema como


la "winspool.drv" y
otros con System.Drawing, pero no consigo imprimir


correctamente. Debo
definir un tamaño un poco no estandar (no es un A4 ni


folio) y ademas,
rellenar unos campos del impreso que estan en posiciones


concretas.

Me interesaria saber como puedo imprimir una pagina


directamente en una
EPSON matricial (que supongo que ira en filas y columnas


aun y no con puntos
o dots).

Cualquier ayuda sera bienvenida, y si tienen algun


ejemplo de como hacerlo,
seria de gran ayuda.

Gracias de antemano.

Saludos,
Oriol Sala.


.

Respuesta Responder a este mensaje
#2 José Antonio
03/05/2005 - 08:41 | Informe spam
Una posible solución, pero tiene el problema de que no funcionan los
caractyeres especiales como acentos, la letra ñ el1º 1ª, etc.

"Juan Carlos" escribió en el mensaje
news:021f01c54c20$ab5cd760$
Mira la siguiente pagina

Te comento a mi no me funciona si mando desde Win 98

Pero si te funciona me comentas

Este articulo te servira, en xp funciona muy bien

http://support.microsoft.com/defaul...cid=kb;EN-
US;322091

Suerte
Juan Carlos S

Hola a todos,

Estoy desarrollando una aplicacion Winforms en C# y


estoy intentando
imprimir de forma directa a una impresora matricial


EPSON. Digo de forma
directa porque no puedo pasar por CrystalReports y


necesito hacerlo asi.

He encontrado ejemplos que utilizan algun sistema como


la "winspool.drv" y
otros con System.Drawing, pero no consigo imprimir


correctamente. Debo
definir un tamaño un poco no estandar (no es un A4 ni


folio) y ademas,
rellenar unos campos del impreso que estan en posiciones


concretas.

Me interesaria saber como puedo imprimir una pagina


directamente en una
EPSON matricial (que supongo que ira en filas y columnas


aun y no con puntos
o dots).

Cualquier ayuda sera bienvenida, y si tienen algun


ejemplo de como hacerlo,
seria de gran ayuda.

Gracias de antemano.

Saludos,
Oriol Sala.


.

Respuesta Responder a este mensaje
#3 Oriol
03/05/2005 - 09:24 | Informe spam
Hola Jose Antonio,

Tienes razon, ayer termine de preparar el codigo para imprimir y me encontre
con ese problema, no puedo imprimir caracteres especiales como acentos, "ñ",
"ç", etc..

Como podria imprimir estos caracteres?? Se que la impresora puede porque la
aplicacion antigua imprimia correctamente, pero ahora no lo hace.

Alguna idea?? Tengo que cambiar el codigo o la forma de imprimir en la
impresora?

Gracias,
Oriol.

"José Antonio" escribió en el
mensaje news:
Una posible solución, pero tiene el problema de que no funcionan los
caractyeres especiales como acentos, la letra ñ el1º 1ª, etc.

"Juan Carlos" escribió en el mensaje
news:021f01c54c20$ab5cd760$
Mira la siguiente pagina

Te comento a mi no me funciona si mando desde Win 98

Pero si te funciona me comentas

Este articulo te servira, en xp funciona muy bien

http://support.microsoft.com/defaul...cid=kb;EN-
US;322091

Suerte
Juan Carlos S

Hola a todos,

Estoy desarrollando una aplicacion Winforms en C# y


estoy intentando
imprimir de forma directa a una impresora matricial


EPSON. Digo de forma
directa porque no puedo pasar por CrystalReports y


necesito hacerlo asi.

He encontrado ejemplos que utilizan algun sistema como


la "winspool.drv" y
otros con System.Drawing, pero no consigo imprimir


correctamente. Debo
definir un tamaño un poco no estandar (no es un A4 ni


folio) y ademas,
rellenar unos campos del impreso que estan en posiciones


concretas.

Me interesaria saber como puedo imprimir una pagina


directamente en una
EPSON matricial (que supongo que ira en filas y columnas


aun y no con puntos
o dots).

Cualquier ayuda sera bienvenida, y si tienen algun


ejemplo de como hacerlo,
seria de gran ayuda.

Gracias de antemano.

Saludos,
Oriol Sala.


.





Respuesta Responder a este mensaje
#4 Leonardo
03/05/2005 - 11:43 | Informe spam
En MsDos, usabamos el comando Copy Filename Lpt1:
y funcionaba.

Desde programa en C
CopyFile((LPCTSTR)fichero,(LPCTSTR)Puerto,FALSE);

Funciona casi siempre. Las excepciones se deben en general a la
configuración del puerto en los ordenadores más nuevos.
Funciona en general para impresoras de red siempre y cuando se configure la
conexión para soportar impresión desde MsDos.

Para obtener la dirección del "Puerto", en las news plantean leerlo de
win.ini, pero esta opción da resultados distintos en función
del sistema operativo (Win95 / Xp).
Más fiable el diálogo de imresora:

PRINTDLG Pd;
char *Names;

memset(&Pd, 0, sizeof(Pd));
Pd.lStructSize = sizeof(Pd);
Pd.Flags = 0x400; //(DefaultPrinter)
if(!PrintDlg(&Pd)) return;

Names = GlobalLock(Pd.hDevNames);
Puerto = Names + ((DEVNAMES *)(Names))->wDeviceOffset ;
if (Puerto[0]!='\\' || Puerto[1]!='\\') //El dispositivo no es un serv. de
impresión en red
Puerto = Names + ((DEVNAMES *)(Names))->wOutputOffset ; // Tomamos
el puerto


Para un mayor control de la impresión, sustituyo CopyFile por mi propia
función:

static void PrintFile(LPCTSTR fichero,LPCTSTR pr)
{ char bf[4096];
int f, fprn, r, l, tiempo=0, ErrCode;
LPVOID lpMsgBuf;

if((f = open(fichero, _O_RDONLY)) == -1){
ShowError( fichero );
return;
}

reintentar: // Si está la impresora ocupada...
if((fprn = open(pr,_O_WRONLY)) == -1){
ErrCode = GetLastError();
if (tiempo<60 && ErrCode==5) { Sleep(5000); tiempo+=5; goto
reintentar; }
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM, NULL,
ErrCode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default
language
(LPTSTR) &lpMsgBuf, 0, NULL );// Display the
string.
r = MessageBox( NULL, lpMsgBuf, pr, MB_RETRYCANCEL|MB_ICONEXCLAMATION);
if (r== IDRETRY) { tiempo=0; goto reintentar; }
}
if( fprn != -1) {
while(!eof(f))
{ l = read(f,bf,sizeof(bf));
if(l>0) write(fprn,bf,l);
}

close(fprn); }
close(f);
}

En Net, es más sencillo puesto que la clase PinterSettings incluye casi todo
lo que necesitamos. Pero se complica con los temas de
seguridad que limitan a usuarios sin privilegios de administrador el uso de
algunas funciones de impresión / Spool.

-

Problemas con el juego de caracteres.

En MsDos, usábamos el juego de caracteres OEM que permitía dibujar líneas y
recuadros en la impresora. Puesto que en pantalla también usábamos el mismo
juego de caracteres, la cosa iba bien.

En Windows, usamos un juego de caracteres ANSI que no incluye los caracteres
de dibujo de IBM y en el cual la ñ, los caracteres acentuados etc, no
coinciden con
el juego de caracteres OEM.

Si no usamos los caracteres de IBM, se puede modificar la cadena de
inicialización de la impresora (en el fichero a enviar) para que trabaje con
el juego de caracteres
apropiado, pero en general este no es el caso.

En su día, opté por crearme un programa con MFC apoyado en Vista/documento
que soporta Print Preview y que transforma en recuadros y líneas los
caracteres de
IBM. Con esta solución, ya sí que salían correctamente los caracteres
acentuados y nacionales.

-


"Oriol" <intranet[arroba]rvsa-itv.com> escribió en el mensaje
news:
Hola a todos,

Estoy desarrollando una aplicacion Winforms en C# y estoy intentando
imprimir de forma directa a una impresora matricial EPSON. Digo de forma
directa porque no puedo pasar por CrystalReports y necesito hacerlo asi.

He encontrado ejemplos que utilizan algun sistema como la "winspool.drv" y
otros con System.Drawing, pero no consigo imprimir correctamente. Debo
definir un tamaño un poco no estandar (no es un A4 ni folio) y ademas,
rellenar unos campos del impreso que estan en posiciones concretas.

Me interesaria saber como puedo imprimir una pagina directamente en una
EPSON matricial (que supongo que ira en filas y columnas aun y no con


puntos
o dots).

Cualquier ayuda sera bienvenida, y si tienen algun ejemplo de como


hacerlo,
seria de gran ayuda.

Gracias de antemano.

Saludos,
Oriol Sala.


Respuesta Responder a este mensaje
#5 Oriol
03/05/2005 - 12:59 | Informe spam
Hola Leonardo,

Vaya curro te has metido con este mail!!!

Te comento, de momento consegui imprimir en la impresora lo que necesito, es
decir, unos sobres con los datos de los clientes. Todo funciona ok, pero el
problema es el que comentas al final de tu mail, y es el juego de
caracteres. No me imprime las Ñ ni los acentos. Tengo como mapa de
caracteres el ANSI. Trabajo en C#/WinForms/WinXP.

Alguna opcion de cambiar el CharSet? En C# solo me permite ANSI/UNICODE.

Saludos,
Oriol.

"Leonardo" escribió en el mensaje
news:
En MsDos, usabamos el comando Copy Filename Lpt1:
y funcionaba.

Desde programa en C
CopyFile((LPCTSTR)fichero,(LPCTSTR)Puerto,FALSE);

Funciona casi siempre. Las excepciones se deben en general a la
configuración del puerto en los ordenadores más nuevos.
Funciona en general para impresoras de red siempre y cuando se configure
la
conexión para soportar impresión desde MsDos.

Para obtener la dirección del "Puerto", en las news plantean leerlo de
win.ini, pero esta opción da resultados distintos en función
del sistema operativo (Win95 / Xp).
Más fiable el diálogo de imresora:

PRINTDLG Pd;
char *Names;

memset(&Pd, 0, sizeof(Pd));
Pd.lStructSize = sizeof(Pd);
Pd.Flags = 0x400; //(DefaultPrinter)
if(!PrintDlg(&Pd)) return;

Names = GlobalLock(Pd.hDevNames);
Puerto = Names + ((DEVNAMES *)(Names))->wDeviceOffset ;
if (Puerto[0]!='\\' || Puerto[1]!='\\') //El dispositivo no es un serv. de
impresión en red
Puerto = Names + ((DEVNAMES *)(Names))->wOutputOffset ; // Tomamos
el puerto


Para un mayor control de la impresión, sustituyo CopyFile por mi propia
función:

static void PrintFile(LPCTSTR fichero,LPCTSTR pr)
{ char bf[4096];
int f, fprn, r, l, tiempo=0, ErrCode;
LPVOID lpMsgBuf;

if((f = open(fichero, _O_RDONLY)) == -1){
ShowError( fichero );
return;
}

reintentar: // Si está la impresora ocupada...
if((fprn = open(pr,_O_WRONLY)) == -1){
ErrCode = GetLastError();
if (tiempo<60 && ErrCode==5) { Sleep(5000); tiempo+=5; goto
reintentar; }
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM, NULL,
ErrCode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default
language
(LPTSTR) &lpMsgBuf, 0, NULL );// Display the
string.
r = MessageBox( NULL, lpMsgBuf, pr, MB_RETRYCANCEL|MB_ICONEXCLAMATION);
if (r== IDRETRY) { tiempo=0; goto reintentar; }
}
if( fprn != -1) {
while(!eof(f))
{ l = read(f,bf,sizeof(bf));
if(l>0) write(fprn,bf,l);
}

close(fprn); }
close(f);
}

En Net, es más sencillo puesto que la clase PinterSettings incluye casi
todo
lo que necesitamos. Pero se complica con los temas de
seguridad que limitan a usuarios sin privilegios de administrador el uso
de
algunas funciones de impresión / Spool.

-

Problemas con el juego de caracteres.

En MsDos, usábamos el juego de caracteres OEM que permitía dibujar líneas
y
recuadros en la impresora. Puesto que en pantalla también usábamos el
mismo
juego de caracteres, la cosa iba bien.

En Windows, usamos un juego de caracteres ANSI que no incluye los
caracteres
de dibujo de IBM y en el cual la ñ, los caracteres acentuados etc, no
coinciden con
el juego de caracteres OEM.

Si no usamos los caracteres de IBM, se puede modificar la cadena de
inicialización de la impresora (en el fichero a enviar) para que trabaje
con
el juego de caracteres
apropiado, pero en general este no es el caso.

En su día, opté por crearme un programa con MFC apoyado en Vista/documento
que soporta Print Preview y que transforma en recuadros y líneas los
caracteres de
IBM. Con esta solución, ya sí que salían correctamente los caracteres
acentuados y nacionales.

-


"Oriol" <intranet[arroba]rvsa-itv.com> escribió en el mensaje
news:
Hola a todos,

Estoy desarrollando una aplicacion Winforms en C# y estoy intentando
imprimir de forma directa a una impresora matricial EPSON. Digo de forma
directa porque no puedo pasar por CrystalReports y necesito hacerlo asi.

He encontrado ejemplos que utilizan algun sistema como la "winspool.drv"
y
otros con System.Drawing, pero no consigo imprimir correctamente. Debo
definir un tamaño un poco no estandar (no es un A4 ni folio) y ademas,
rellenar unos campos del impreso que estan en posiciones concretas.

Me interesaria saber como puedo imprimir una pagina directamente en una
EPSON matricial (que supongo que ira en filas y columnas aun y no con


puntos
o dots).

Cualquier ayuda sera bienvenida, y si tienen algun ejemplo de como


hacerlo,
seria de gran ayuda.

Gracias de antemano.

Saludos,
Oriol Sala.






Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida