Question

Une imprimante d'étiquettes est controlée en envoyant une chaîne de caractères ASCII premières (qui met en forme une étiquette). Comme ceci:

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

 RawPrinterHelper.SendStringToPrinter(printerName, s);

Cette variante hardcoded fonctionne bien.

Maintenant, je veux mettre la chaîne de commande dans un fichier txt et lu lors de l'exécution. Comme ceci:

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

Mais dans cette imprimante imprime de cas rien.

Il semble que StreamReader ajoute quelque chose d'autre à cette chaîne

(Si je mets la chaîne de lecture à un tout MessageBox.Show(printstr); semble correct. Bien que, de cette façon, nous ne pouvons pas voir les caractères de contrôle ajoutés).

Qu'est-ce que pourrait être une solution à ce problème?

Était-ce utile?

La solution

On dirait une imprimante d'étiquettes Zebra, j'ai eu le déplaisir. La première chose que vous devez corriger est la façon dont vous générez le fichier print.txt. Vous aurez besoin d'écrire une ligne pour chaque section de la chaîne de commande qui est terminée par \ r. Par exemple, votre chaîne de commande doit être écrit comme ceci:

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

vous pouvez utiliser ReadLine () lorsque vous lisez l'étiquette de print.txt. Vous aurez besoin de lire plusieurs lignes pour obtenir l'étiquette complète. J'ai ajouté une ligne vide à la fin, vous pouvez utiliser que lorsque vous lisez le fichier pour détecter que vous avez obtenu toutes les lignes qui crée l'étiquette. Ne pas oublier d'ajouter « \ r » à nouveau lorsque vous envoyez à l'imprimante.

Autres conseils

Votre code appelle tr.ReadLine() une fois, mais il semble que vous avez plusieurs lignes dans cette chaîne.

Il se pourrait que le StreamReader est en train de lire dans un format Unicode. Soit dit en passant, vous lisez que dans une seule ligne ... vous devez itérer les lignes à la place ... Votre meilleur pari serait de le faire de cette façon:

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

Ou le lire comme un fichier binaire et lire le morceau entier dans une série d'octets au lieu, la vérification d'erreur est supprimée.

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

Edit: Après rem est un commentaire que je pensais qu'il valait mieux d'inclure cet extrait supplémentaire ici ... ce fait suite à l'extrait précédent, où est fait référence à la data variables ...

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

Hope this helps, Meilleures salutations, Tom.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top