2012-07-10 10 views
5

Necesito enviar contenido a la impresora en C# .NET de la misma forma que lo hace el comando PRINT.¿Qué hace Notepad diferente bajo el capó que el comando PRINT?

Tengo una impresora térmica Godex con el software QLabel incluido. Ahora tiene la opción de guardar la etiqueta como un comando que puede pasar a la impresora con el comando de comando PRINT. El archivo tiene el siguiente aspecto:

^Q80,3 
^W100 
^H10 
^P1 
^S3 
^AD 
^C1 
^R2 
~Q+0 
^O0 
^D0 
^E35 
~R200 
^L 
Dy2-me-dd 
Th:m:s 
AH,0,0,1,1,0,0,X 
AH,744,0,1,1,0,0,X 
AH,746,560,1,1,0,0,X 
AH,0,550,1,1,0,0,X 
AG,160,208,1,1,0,0, 
AA,234,283,1,1,0,0,Haloo 
E 

que funciona cuando hago algo como esto:

net use LPT2 \\localhost\godexUsbPrinter /yes 
print /D:LPT2 label.cmd 

e imprime mi sello a cabo muy bien.

Ahora, si abro esto en el bloc de notas e imprimo, simplemente me imprime este texto.

Me pregunto qué hace el comando PRINT bajo el capó y cómo puedo programar mi programa basado en C# para replicar el comportamiento? Porque cuando implemente la lógica de impresión, simplemente me imprime el texto plano como lo hace el bloc de notas.

Sé que podría llamar a un comando PRINT con Process.Start desde C#, pero necesito reemplazar algún valor de marcador de posición en la plantilla de etiqueta todo el tiempo. Podría crear un archivo temporal en el disco e imprimirlo, pero preferiría evitar ese escenario.

+0

supongo que se traduce^Q y tal en los caracteres de control correspondientes –

+0

imprimir no hace nada bajo el capó en ese sentido, esa es la diferencia. notepad hace todo lo posible para mostrar los caracteres que tenga en el archivo, pero probablemente elimine algunos caracteres no imprimibles en el proceso. –

Respuesta

4

Para ser honesto, el título de la pregunta es el camino equivocado. PRINT no hace nada espectral en absoluto, solo vacía toda su entrada a la impresora. Es el Bloc de notas que, a través del sistema de impresión de Windows, envía varios comandos para paginación y terminaciones de línea y, por último, los datos que desea imprimir. El código que muestra son datos brutos de la impresora, por lo que tendrá que enviarlo 'en bruto' y no como texto. Entonces, técnicamente es un duplicado de this question.

Cómo hacerlo se explica here. Está utilizando P/Invocaciones al winspool.Drv.

+0

Gracias por la aclaración. Esto funciona. Probablemente debería cambiar el título de la pregunta? –

+0

@JanisVeinbergs Intenté aclararlo un poco. :) – CodeCaster

Cuestiones relacionadas