Imprimir por impresora fiscal C#

kraneok

Hola gente que tal, hoy vengo con una dudilla acerca de imprimir con una EPSON M119D, fiscal.
Estoy utilizando la librería de Microsft POS, aunque no consigo detectar la impresora pero si está instalada.

¿ Qué puede estar ocurriendo ?, esta conectada por paralelo.

Un saludo.

Soltrac

Supongo que te refieres a que usas POS for .NET.

Tienes que tener la impresora instalada con los drivers OPOS, no los drivers normales, si no, no te la va a detectar en la vida.

2 respuestas
kraneok

#2 Esa es justamente la respuesta que quería xDD. Gracias por alegrarme el día ;)

13 días después
kraneok

#2 La impresora que tienen para imprimir no esta soportada por ningún OPOS,¿ me toca escribir a pelo secuencias de escape, verdad ?.

1 respuesta
Soltrac

#4 Sí, exactamente.

Por aquí puedes empezar:

http://support.microsoft.com/kb/322091

2 respuestas
kraneok

#5 La impresora tiene instalado drivers, he conseguido imprimir mediante printdocument, pero claro, con esto no tengo apenas control.

1 respuesta
Soltrac

#6 Hazlo como te he puesto en el enlace

1 respuesta
kraneok

#7 En primer lugar darte las gracias por echarme una manilla. Pero me gustaría preguntarte, si esto es una solución válida y viable, o, por el contrario es una solución rápida pero que no es la mejor.

Un saludo.

1 respuesta
Soltrac

#8 Claro que es válida y viable, es más, es la mejor opción si la impresora no tiene driver OPOS. No solo eso, si piensas usar la impresora en red necesitas hacerlo así porque OPOS no te permite ponerla en red.

2 respuestas
kraneok

#9 Vale, muchísimas gracias entonces, voy a seguir indagando.
Un saludo.

kraneok

#9 Quizás sea muy pesado, pero me asalta otra duda.
¿ El texto que sale por el ticket se ajusta a este ?, ¿ como se separan las distintas lineas y palabras ?. Un poquitín mas de luz.

Gracias ante de todo.

Soltrac

El ticket tiene generalmente unas 40 columnas. Si escribes una línea de más de 40 caracteres salta del línea automáticamente.

1 respuesta
kraneok

#12 Muchísimas gracias :D, las columnas corresponden con carácter?

1 respuesta
Soltrac

#13 Sip. Anyway el nº de columnas depende de la impresora. Incluso algunas se pueden cnfigurar las columnas q quieres.

2 respuestas
kraneok

#14 Esta en concreto es 40 según he leído.

10 días después
kraneok

#14 Una preguntilla mas, tienes algún conocimiento de como se envían los caracteres ESC desde C#.

Espero que puedas echarme una manilla, gracias de nuevo.

all hail Fuhrer

1 respuesta
Soltrac

#16 Por supuesto, te puse el ejemplo en #5.

all hail Fuhrer

1 respuesta
kraneok

#17 Si, es lo que estoy usando, pero me refiero a por ejemplo, antes de enviar un ESC tienes que enviar el ESC en si, en char no?,¿ se haría así ? Conver.ToChar("ESC"), ¿o como?, es como solo veo ejemplos en Basic y me deja algo de dudas.

Por cierto, que es all hail Fuhrer, eso no lo he puesto yo antes, que cosa mas rara.

Por ejemplo, para hacer un LineFeed tendría que mandarle a la impresora "ESC d 3", esto me imprimiría tres saltos de línea, pero claro, esto no sé si tengo que enviarlo en Hexadecimal, en decimal o en yo que poyas se xdd.

1 respuesta
Soltrac

#18 Es el día de los santos inocentes XDDDD

Es más sencillo de lo q piensas....

http://www.asciitable.com/

ves que el caracter de escape del ESC es el 27 no? Para convertirlo a char, haces una conversión y punto:

((char)27).ToString();

Así que para enviar ESC d 3 envías:

((char)27).ToString() + "d3";

Ahora, para hacerlo bonito, yo haría lo siguiente:


const char ESC = '\x1B'; // Notación en hexadecimal, otra opción

StringBuilder sb = new StringBuilder();
sb.AppendLine(ESC + "d3");
string output = sb.ToString();

o incluso


const char ESC = '\x1B';
readonly string LineFeed = ESC + "d3";

E ir creándote todos los caracteres de escape como variables para ir reutilizándolos.

Recuerda, habrá caracteres que podrás imprimirlos directamente y otros que no, como el ESC. Esos últimos, los imprimes usando su valor INT o su valor HEX.

2 respuestas
kraneok

#19 Bien, de nuevo, muchísimas gracias. Es que realmente no sabía que tipo de dato y en que formato me lo pide la impresora, imaginaba por los ejemplos (en basic), que eran en char, pero no me quedaba muy claro.

Dicho esto, vamos al lío y graaaaaaaaaacias :)

kraneok

#19 Pues todo bien, el ticket bien, pero hay un problema entre línea y linea me imprime muchisimas lineas blancas, vamos, que me ha sacado un ticket de 2mettros xdddddd ¿alguna idea?

Gracias de antemano.

1 respuesta
Soltrac

#21 Tendría q ver el código, no tiene sentido eso q dices.

2 respuestas
kraneok

#22 Te voy a pegar algo.

Abreviando, declarando variables.

///- Ticket formats and configurations
        // Escape chars
        private const char ESC = '\x1B';
        private const char GS  = '\x1D';

    // Formats
    private readonly String LineFeed          = ESC + "d";
    private readonly String LineJustification = ESC + "a"; // Default 0, 0 Left, 1 Center, 2 Right
    private readonly String LineFont          = ESC + "!"; // Default 0,  Font - > A = 0, B = 1
    private readonly String LineDot           = ESC + "-"; // Default 0, Off = 0; 1-dot = 1(-), 2-dot = 2(=)
    private readonly String CutPapper         = GS  + "V"; // Cut papper

Un ejemplo de lineas

// Add tree feedlines
                        texto.AppendLine( LineFeed          + "3"  ); // Three line feed
                        texto.AppendLine( LineJustification + "1"  ); // Center Justification

                    ///- Header
                    texto.AppendLine( "Joyería S.L." + LineFeed + "1" );
                    texto.AppendLine( "Calle"               + LineFeed + "1" );
                    texto.AppendLine( "CIF "                + LineFeed + "1" );
                    texto.AppendLine( "CP Sevilla"          + LineFeed + "1" );

                    // Line feed and back return to justification to 0
                    texto.AppendLine( LineJustification + "0" );  // Left Justification
                    texto.AppendLine( LineFeed          + "2" );  // Two line feed

                    texto.AppendLine( "Ticket : " + saleId      + LineFeed + "1" );
                    texto.AppendLine( "Fecha : "  + saleDate    + LineFeed + "1" );
                    texto.AppendLine( "Forma de Pago : CONTADO" + LineFeed + "2" );

Ojo, que lo hace todo bien, menos eso, lo centra todo correctamente, los tamaños, etc, etc.

kraneok

#22 Tienes alguna idea de que puede ser ?

Soltrac

Perdona, me había olvidado de ti.

No pongas un line feed en cada appendline....un appendline es un salto de línea ya de por sí.

1 respuesta
kraneok

#25 jaja, gracias por olvidarte de mi.
Si, imaginaba que cada append era una linea diferente, pero no sabía si la impresora lo interpreta así o no.

Usuarios habituales

  • kraneok
  • Soltrac