سؤال

يتم التحكم في طابعة التسمية عن طريق إرسال سلسلة من أحرف RAW ASCII (التي تتنظيم تسمية). مثله:

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

 RawPrinterHelper.SendStringToPrinter(printerName, s);

هذا البديل المتشددين يعمل بشكل جيد.

الآن أريد أن أضع سلسلة التحكم في ملف .txt وقراءته أثناء وقت التشغيل. مثله:

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

ولكن في هذه الحالة لا تطبع الطابعة.

يبدو أن StreamReader يضيف شيء آخر إلى هذه السلسلة

(إذا وضعت سلسلة القراءة على MessageBox.Show(printstr); كل شيء يبدو على ما يرام. رغم ذلك ، بهذه الطريقة لا يمكننا رؤية أحرف التحكم المضافة).

ماذا يمكن أن يكون حلاً لهذه المشكلة؟

هل كانت مفيدة؟

المحلول

يبدو وكأنه طابعة ملصق Zebra ، لقد شعرت بالاستياء. أول شيء تحتاج إلى إصلاحه هو الطريقة التي تنشئ بها ملف print.txt. ستحتاج إلى كتابة سطر واحد لكل قسم من سلسلة الأوامر التي تم إنهاءها بـ r. على سبيل المثال ، يجب كتابة سلسلة الأوامر الخاصة بك مثل هذا:

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

يمكنك الآن استخدام readline () عند قراءة التسمية من print.txt. ستحتاج إلى قراءة خطوط متعددة للحصول على الملصق الكامل. أضفت سطرًا فارغًا في النهاية ، يمكنك استخدام ذلك عندما تقرأ الملف لاكتشاف أنك حصلت على جميع الخطوط التي تنشئ التسمية. لا تنس إلحاق " r" مرة أخرى عندما ترسلها إلى الطابعة.

نصائح أخرى

استدعاء الكود الخاص بك tr.ReadLine() مرة واحدة ، ولكن يبدو أن لديك خطوط متعددة في تلك السلسلة.

يمكن أن يكون قراءته يقرأه بتنسيق Unicode. بالمناسبة ، أنت تقرأ في سطر واحد فقط ... تحتاج إلى تكرار الخطوط بدلاً من ذلك ... سيكون أفضل رهان هو القيام بذلك بهذه الطريقة:

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

أو اقرأه كملف ثنائي وقراءة الجزء بالكامل في سلسلة من البايت بدلاً من ذلك ، يتم حذف التحقق من الخطأ.

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

تعديل:بعد ريمتعليق ، اعتقدت أنه من الأفضل تضمين هذا المقتطف الإضافي هنا ... يتبع ذلك من المقتطف السابق حيث المتغير data مشار إليها ...

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

أتمنى أن يساعد هذا ، مع أطيب التحيات ، توم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top