• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Không in được tiếng việt khi in máy in nhiệt (Kết nối Bluetooth)

Nơi trao đổi về các vấn đề trong lập trình Windows Forms, Console dùng cú pháp ngôn ngữ Visual Basic .NET và C#

Moderators: tungblt, vuathongtin

muaphonui_2010
Thành viên ưu tú
Thành viên ưu tú
Posts: 532
Joined: Fri 26/11/2010 1:15 pm
Location: TP.HCM
Has thanked: 186 times
Been thanked: 32 times
Contact:

Không in được tiếng việt khi in máy in nhiệt (Kết nối Bluetooth)

Postby muaphonui_2010 » Sat 13/04/2019 11:17 am

Chào các bạn.
Mình dùng đoạn code này để in ra máy in nhiệt cầm tay kết nối qua Bluetooth với điện thoại android.
Nhưng khi in tiếng việt thì nó bị lỗi font (nếu in tiếng anh thì nó bình thường).
Không biết mình thiếu đoạn mã nào hay không.
Mình đang dùng máy in POS- 5802LD (Mình thử tải phần mềm trên CH Play về in tiếng việt ra bình thường, nếu các bạn biết loại nào khác mà in được thì chỉ giúp mình với nhé
Mình làm theo bài viết này
https://ozaksut.com/xamarin-forms-bluetooth-printer-chapter-1-android/

đây là đoạn code của mình

Code: Select all

 public async Task Print(string deviceName, string text)
        {
            using (BluetoothAdapter bluetoothAdapter = BluetoothAdapter.DefaultAdapter)
            {
                BluetoothDevice device = (from bd in bluetoothAdapter?.BondedDevices
                                          where bd?.Name == deviceName
                                          select bd).FirstOrDefault();
                try
                {
                    using (BluetoothSocket bluetoothSocket = device?.
                        CreateRfcommSocketToServiceRecord(
                         UUID.FromString("00001101-0000-1000-8000-00805f9b34fb")))
                    {
                   
                     text = "Chuổi cần in: In tiếng việt bị lỗi \n Mong được giúp đỡ \n ";

                        bluetoothSocket?.Connect();
                        byte[] buffer = Encoding.Unicode.GetBytes(text);

                        bluetoothSocket?.OutputStream.Write(buffer, 0, buffer.Length);
                        bluetoothSocket.Close();
                     
                    }
                }
                catch (Exception exp)
                {
                    throw exp;
                }
            }
        };



Còn đây là kết quả in đầu tra bị lỗi
Image

Nhờ các bạn xem giúp mình với, hoặc loại máy in nào khác mà in được thì giới thiệu mình với nhé.
Có hướng nào khác không xin chỉ mình với.
Mục đích cuối cùng của mình là in được cái bill có tiếng việt, xấu xinh gì ko quan trọng.
Xin cảm ơn.



User avatar
NTN
Thành viên tâm huyết
Thành viên tâm huyết
Posts: 482
Joined: Wed 05/02/2014 3:43 pm
Location: Đồng Tháp,Việt Nam
Has thanked: 19 times
Been thanked: 7 times
Contact:

Re: Không in được tiếng việt khi in máy in nhiệt (Kết nối Bluetooth)

Postby NTN » Sun 14/04/2019 7:16 pm

Mình không rành code dạng này nhưng mình đã tìm hiểu. Bạn thử chuyển sang UTF8 xem thế nào?
Bạn tham khảo thử:
  1. byte[] b = new byte[2048];
  2. int k = Socket.Receive(b);    
  3. string message = Encoding.UTF8.GetString(b, 0, k);
vietdap.com - trungnhan.name.vn - Tình yêu của tôi <3

muaphonui_2010
Thành viên ưu tú
Thành viên ưu tú
Posts: 532
Joined: Fri 26/11/2010 1:15 pm
Location: TP.HCM
Has thanked: 186 times
Been thanked: 32 times
Contact:

Re: Không in được tiếng việt khi in máy in nhiệt (Kết nối Bluetooth)

Postby muaphonui_2010 » Mon 15/04/2019 7:37 am

Cảm ơn bạn.
mình thử đoạn code của bạn mình pass vào thử thì nó lỗi ở dòng này bạn. int k = Socket.Receive(b); giống như nó Socket nó không có thuộc tính Receive thì phải.
Nhưng với đoạn code đầu ra là :
bluetoothSocket?.OutputStream.Write(buffer, 0, buffer.Length);
==> buffer là dạng byte,
trong khi đó đoạn "string message = Encoding.UTF8.GetString(b, 0, k);" ==> là string ==> mình nghĩ nó sẽ không nhận đâu.
---------------------
Mình sửa đoạn code này : byte[] buffer = Encoding.Unicode.GetBytes(text); thành ==> byte[] buffer = Encoding.UTF8.GetBytes(text); ==> in vẫn lỗi. mình đang đoán cái máy mình đang thử nó không hỗ trợ in tiếng việt. chắc nó chỉ hỗ trợi tiếng anh và in hình ảnh thôi.
Cảm ơn bạn.

FlyingFox
Guru
Guru
Posts: 814
Joined: Wed 20/04/2011 9:56 am
Been thanked: 323 times

Re: Không in được tiếng việt khi in máy in nhiệt (Kết nối Bluetooth)

Postby FlyingFox » Tue 22/10/2019 9:21 am

Viết thêm function này để chuyển đổi sang Unicode
  1. public string ConvertUtf8(string content)
  2. {
  3.     string str = "\u001B" + "t" + char.ConvertFromUtf32(94) + "\n";
  4.     // First you need to convert the vietnamese string to utf-8 bytes.
  5.     byte[] utf8Bytes = System.Text.Encoding.UTF8.GetBytes(content);
  6.     // Convert utf-8 bytes to a string.
  7.     str += System.Text.Encoding.UTF8.GetString(utf8Bytes);
  8.     return str;
  9. }


text = ConvertUtf8("Chuổi cần in: In tiếng việt bị lỗi \n Mong được giúp đỡ \n ");

muaphonui_2010
Thành viên ưu tú
Thành viên ưu tú
Posts: 532
Joined: Fri 26/11/2010 1:15 pm
Location: TP.HCM
Has thanked: 186 times
Been thanked: 32 times
Contact:

Re: Không in được tiếng việt khi in máy in nhiệt (Kết nối Bluetooth)

Postby muaphonui_2010 » Tue 22/10/2019 9:31 am

Cảm ơn anh.
để hôm nào tìm lại máy đó thử đoạn mã của anh thử in được không.
Chứ đợt đó em in không được, rồi chuyển qua loại máy có hỗ trợ tiếng việt nên in cũng được rồi, nhưng loại máy đó lại chỉ có khổ giấy k60 chứ ko có loại in khổ K80 cho nó rộng.
Nhưng cũng loại máy đó nhưng in trên winforms thì ok nha. nhưng em thì in từ xamarin (viết dùng cho app điện thoại di động) thì lỗi.
Để hôm nào em thử lại thử rồi em báo kết quả.


Return to “Visual Basic .NET và C# (VB.NET & C#)”

Who is online

Users browsing this forum: No registered users and 1 guest