Pregunta

Una impresora de etiquetas se controla mediante el envío de una cadena de caracteres ASCII primas (que da formato a una etiqueta). De esta manera:

 string s = "\x02L\r" + "D11\r" + "ySWR\r" + "421100001100096" + date + "\r" + "421100002150096" + time + "\r" + "421100001200160" + price + "\r" + "E\r";

 RawPrinterHelper.SendStringToPrinter(printerName, s);

Esta variante codificada funciona bien.

Ahora quiero poner la cadena de control en un archivo .txt y leerlo durante el tiempo de ejecución. De esta manera:

        string printstr;
        TextReader tr = new StreamReader("print.txt");
        printstr = tr.ReadLine();
        tr.Close();

Sin embargo, en este caso impresora imprime nada.

Parece que StreamReader añade algo más a esta cadena

(Si pongo la cadena de lectura a un MessageBox.Show(printstr); todo está bien. Sin embargo, de esta manera no podemos ver los caracteres de control en el original).

Lo que podría ser una solución a este problema?

¿Fue útil?

Solución

se parece a una impresora de etiquetas Zebra, he tenido el disgusto. La primera cosa que debe arreglar es la manera de generar el archivo print.txt. Tendrá que escribir una línea para cada sección de la cadena de comandos que ha terminado con \ r. Por ejemplo, la cadena de comando debe escribirse así:

printFile.WriteLine("\x02L");
printFile.WriteLine("D11");
printFile.WriteLine("ySWR");
printFile.WriteLine("421100001100096" + date);
printFile.WriteLine("421100002150096" + time);
printFile.WriteLine("421100001200160" + price);
printFile.WriteLine("E");
printFile.WriteLine();

Ahora puede utilizar ReadLine () cuando se lee la etiqueta de print.txt. Tendrá que leer múltiples líneas para conseguir la etiqueta completa. He añadido una línea en blanco al final, usted podría utilizar que cuando se lee el archivo para detectar que tienes todas las líneas que crea la etiqueta. No se olvide de datos anexados "\ r" de nuevo cuando lo envía a la impresora.

Otros consejos

Sus llamadas codificadas tr.ReadLine() una vez, pero parece que tiene varias líneas en esa cadena.

Podría ser que el StreamReader lo está leyendo en un formato Unicode. Por cierto, que está leyendo en solamente una sola línea ... que necesita para recorrer las líneas en lugar ... Su mejor opción sería la de hacerlo de esta manera:

string printstr;
TextReader tr = new StreamReader("print.txt",System.Text.Encoding.ASCII);
printstr = tr.ReadToEnd();
tr.Close();

O leerlo como un archivo binario y leer todo el trozo en una serie de bytes en cambio, se omite la comprobación de errores.

System.IO.BinaryReader br = new System.IO.BinaryReader(new StreamReader("print.txt", System.Text.Encoding.ASCII));
byte[] data = br.ReadBytes(br.BaseStream.Length);
br.Close();

Editar Después de rem 's comentario pensé que lo mejor para incluir este fragmento adicional aquí ... esto es consecuencia del fragmento anterior, donde la variable data se hace referencia ...

string sData = System.Text.Encoding.ASCII.GetString(data);

Espero que esta ayuda, Atentamente, Tom.

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