Pregunta

Estoy tratando de imprimir en impresoras de matriz de puntos (varios modelos) desde C #, actualmente estoy usando Win32 API (puede encontrar muchos ejemplos en línea) para enviar códigos de escape directamente a la impresora desde mi C # solicitud. Esto funciona muy bien, pero ...

Mi problema es que estoy generando los códigos de escape y no confiando en el sistema de impresión de Windows, las impresiones no se pueden enviar a cualquier " normal " impresoras o para cosas como controladores de impresión PDF. (Esto ahora está causando un problema ya que estamos tratando de usar la aplicación en un Terminal Server 2008 usando Easy Print [que está basado en XPS])

La pregunta es: ¿Cómo puedo imprimir documentos formateados (facturas en papel preimpreso) en impresoras de matriz de puntos (Epson, Oki y Panasonic ... varios modelos) desde C # sin usar impresión directa, códigos de escape, etc.

** Solo para aclarar, estoy intentando cosas como GDI + (System.Drawing.Printing) pero el problema es que es muy difícil hacer que las cosas se alineen como lo hacía el código anterior. (El antiguo código envió los caracteres directamente a la impresora sin pasar por el controlador de Windows). ¿Alguna sugerencia de cómo podrían mejorarse las cosas para que pudieran usar GDI + pero aún así alinearse como lo hizo el antiguo código?

¿Fue útil?

Solución

Probablemente debería usar una herramienta de creación de informes para crear plantillas que le permitan a usted o a los usuarios ubicar correctamente los campos con respecto a la papelería preimpresa.

Usando impresoras matriciales, básicamente tiene que trabajar en cualquiera de los 2 modos:

  • modo simple de escritura de tipo de texto de línea / columna al que envía secuencias de escape para administrar una pequeña cantidad de fuentes que se incluyen en el hardware de la impresora y tienen que administrar los retornos de línea, etc.
  • salida gráfica donde la página se rasteriza y el controlador de la impresora simplemente impulsa el cabezal de impresión y los pines para generar los puntos.

El primer uso se desaprueba principalmente en Windows, ya que no ofrece mucho para controlar la salida, y cada impresora tiene sus propias características, por lo que resulta difícil de manejar y difícil para el software predecir y posicionar cosas en la página (no WYSIWYG).

El segundo solo usa un paradigma de página de gráficos que hace que el posicionamiento del texto y los gráficos sea independiente de las capacidades reales de la impresora.
Cuando utilice papelería preimpresa, su trabajo debe colocar correctamente los datos en la página.
Hacer esto a mano consume recursos y, por lo tanto, no se recomienda crear el diseño en código, ya que se quedará atascado con el código para cambiar si cambia la impresora, el formato de página o el diseño de papelería impreso.

Lo mejor es usar el modelo de impresión estándar ofrecido por .Net y una herramienta de informes que le permite definir modelos y plantillas donde se ubicarán el texto y los gráficos correctos, y luego manejar esto desde el código.

Visual Studio se entrega con una versión de Crystal Reports, pero existen otros sistemas mejores de generación de informes (yo uso el de developer express por ejemplo), algunos de ellos son incluso free .

Otros consejos

Desde mi experiencia, es más fácil usar dos tipos de informes para los mismos datos:

  • se requiere un informe para impresoras matriciales con códigos de escape y todo lo demás, que se guarda en un archivo de texto y luego se imprime con varios métodos ( type file.txt > lpt1 o seleccionando el código la impresora predeterminada y usando NOTEPAD / P file.txt ) - vea esta página para más métodos de impresión.
  • otro informe para impresoras láser / de inyección de tinta utilizando una herramienta de creación de informes (Crystal Reports, Administrador de informes , < a href = "http://rlib.sicompos.com/" rel = "nofollow noreferrer"> RLIB o cualquier cosa disponible)

Dado que no es infrecuente comprar el tipo correcto de impresora para el tipo correcto de informe, este enfoque tiene la ventaja de permitir que el cliente decida: impresora de matriz de puntos para informes de texto en formato de papel A3 / A4 (generalmente para la contabilidad) departamento) o impresora láser / inyección de tinta para informes gráficos.

no sé cómo usar la secuencia de escape en C #. Pero tengo toda la secuencia de escape para la impresora genérica / solo texto. Espero que ayude.

Secuencia de escape de impresión genérica 1) Establecer el espaciado de línea a) 1/8 de pulgada - 27,48 b) 1/6 pulgadas - 27,50

2) Seleccionar calidad de borrador a) 27,120,0 / 27,120,48

3) Calidad de la carta a) 27,120,1 / 27,120,49

4) Doble altura a) 27,119, n i) n = 1 en ii) n = 0 desactivado

5) Impresión bidireccional a) 27,85, n i) 0 - En ambos sentidos ii) 1 - One Way

6) Aumentar el espacio de caracteres a) 27,32, n (Incremento en n / 12 pulgadas)

7) Seleccionar fuente en negrita a) 27,69

8) Cancelar fuente negrita a) 27,70

9) Seleccionar fuente cursiva a) 27,52

10) Cancelar fuente cursiva a) 27,53

11) Seleccionar a) 10cpi 27,8 b) 12cpi 27,77 c) 15cpi 27,103 d) 18cpi 27,103

12) Establecer margen derecho a) 27,81, n

13) Establecer margen izquierdo a) 27,108, n

14) Alimentación de formulario a) 12

15) Impresión condensada a) 0F On b) 12 Off

16) Impresión de doble huelga a) 27,71

17) Cancelar impresión de huelga a) 27,72

18) Bajo línea a) 27,45,0 Apagado b) 27,45,1 En

19) Ancho doble a) 27,84,0 Apagado b) 27,84,1 ENCENDIDO

Primero convierta los comandos de la secuencia en caracteres y luego pase a la impresora

Fuente negrita de ejemplo 27,69

string.Format (" {0} {1} ", Convert.ToChar (27), Convert.ToChar (69));

Quizás un poco más corto como:

string.Format (" {0} {1} ", (char) (27), (char) (69));

Eche un vistazo a System.Drawing.Printing espacio de nombres.

Si su impresora tiene un controlador para instalar, puede usar el sistema de impresión normal de Windows. La mayoría de las impresoras, incluidas las de POS, tienen controladores de Windows que funcionan. (De todos modos, la mayoría de las impresoras matriciales son compatibles con Epson). Algunos controladores de impresora POS también permiten enviar códigos de escape directamente a la impresora (utilizando fuentes especiales); probablemente no necesites tal funcionalidad.

Si este no es el caso, puede agregar una impresora (controlador) Genérica / Sólo Texto con la ayuda del Asistente para Agregar Impresora. Una vez hecho esto, puede configurar ciertos comandos (secuencias de escape) para él: tamaño de fuente 10/12/17, negrita activado / desactivado, subrayado activado / desactivado, inicio / detención de trabajo, alimentación de papel y selección de tamaño.

Estoy usando una impresora genérica asociada con el puerto de ARCHIVO para probar varios informes de impresoras POS: es fácil mirar el archivo de texto para validar los números en la impresión. Por supuesto, para formatear se necesita un controlador de impresora específico.

Parece que lo que me gustaría hacer no es posible.

Mis opciones de impresión no se gestionan directamente a la impresión de la impresora (usando winspool.drv), lo que me permite hacer lo que quiera con la impresora y me permite alinear fácilmente las cosas. Ejemplo de VB.NET O puedo usar GDI + (System.Drawing.Printing) que es complicado de obtener las cosas se alinean, pero funcionarán con impresoras de matriz de puntos como las impresoras XPS y PDF.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top