Domanda

Una stampante per etichette è controllato mediante l'invio di una stringa di caratteri ASCII prime (che formatta un etichetta). In questo modo:

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

 RawPrinterHelper.SendStringToPrinter(printerName, s);

Questa variante hardcoded funziona bene.

Ora voglio mettere la stringa di controllo in un file .txt e leggerlo durante il runtime. In questo modo:

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

Ma in questo caso nulla stampante stampa.

Sembra, che StreamReader aggiunge qualcos'altro a questa stringa

(Se metto la stringa di lettura per un MessageBox.Show(printstr); tutto sembra OK. Anche se, in questo modo non possiamo vedere i caratteri di controllo aggiunti).

Quale potrebbe essere una soluzione a questo problema?

È stato utile?

Soluzione

si presenta come una stampante di etichette Zebra, ho avuto il dispiacere. La prima cosa che devi correzione è il modo in cui si genera il file print.txt. Avrete bisogno di scrivere una riga per ogni sezione della stringa di comando che è terminato con \ r. Ad esempio, la stringa di comando deve essere scritto in questo modo:

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();

Ora è possibile utilizzare ReadLine () quando si legge l'etichetta da print.txt. Avrete bisogno di leggere più righe per ottenere l'etichetta completa. Ho aggiunto una riga vuota alla fine, è possibile utilizzare che quando si legge il file di rilevare che avete ottenuto tutte le linee che crea l'etichetta. Non dimenticate di aggiungere "\ r" di nuovo quando lo si invia alla stampante.

Altri suggerimenti

Le chiamate di codice tr.ReadLine() una volta, ma sembra che si dispone di più linee in quella stringa.

E 'possibile che lo StreamReader sta leggendo in un formato Unicode. Tra l'altro, si sta leggendo in solo una sola riga ... è necessario iterare le linee invece ... La cosa migliore sarebbe quella di fare in questo modo:

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

O leggere come un file binario e leggere l'intero pezzo in una serie di byte, invece, il controllo degli errori viene omesso.

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();

Modifica Dopo rem 's commento che ho pensato che fosse meglio per includere questo frammento aggiuntivo qui ... questo fa seguito al snippet di codice precedente in cui l'data variabile si fa riferimento ...

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

Spero che questo aiuti, I migliori saluti, Tom.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top