2016-01-27 158 views
0

的代碼頁我有以下設置:藍牙票據打印機 - 不能更改打印機

  1. 工作站使用的內核Linux work002 3.19.0-47-generiC#53~14.04.1-Ubuntu SMP Mon Jan 18 16:09:14 UTC 2016 x86_64 x86_64 x86_64 GNU/LinuxUbuntu 14.04.3 LTSQt 5.5.1 Opensource 64bit
  2. 一些USB < - >藍牙加密狗,它一直在努力就好了
  3. 藍牙基於noname 48mm收據打印機從中國,這是發貨給我沒有任何文件(假設ESC/POS命令集)。

現在,這種設置似乎(初始連接時,配對,一旦配對藍色LED二極管導通的打印機)的工作,因爲我可以通過QBluetoothSocket::write方法在打印機上打印一些文字:

this->ueBtPrinterSocket()->write(QByteArray("Printer ready. @[\\]^`{|}~ ĐŠŽĆČđšžćč")); 

不過,我來自斯洛文尼亞,我需要斯洛文尼亞語的信件,這就是爲什麼我把斯洛文尼亞字母放到上面write - ĐŠŽĆČđšžćč,而我得到一些中文信件。因此,我試圖根據ESC t n function更改打印機的代碼頁,但沒有成功:

QByteArray cmdChangeCodePageToSlovene; // ESC t n 
cmdChangeCodePageToSlovene.resize(3); 
cmdChangeCodePageToSlovene[0]=0x1b; 
cmdChangeCodePageToSlovene[1]=0x74; 
cmdChangeCodePageToSlovene[2]=0x18; 
qint64 result=this->ueBtPrinterSocket()->write(cmdChangeCodePageToSlovene); 

qDebug() << Q_FUNC_INFO 
     << " bytes written:" 
     << result; 

qDebug()輸出通知我:

無效UeBluetoothManager :: ueSlotBtPrinterPairedAndConnected()個字節 寫:3

這沒關係。現在,中國製造商終於給我寄了一些Android的代碼,這個代碼很難被稱爲SDK,並且有一個用於打印機的.jar庫。我上傳這個.jar文件​​網站,我發現下面的改變打印機的代碼頁反編譯的方法:

public int SetCharacterSet(int Value) { 
    if (g_nConnect != 1) { 
     return 101; 
    } 
    if (!(Value > 0 && Value < 10 || Value > 16 && Value < 19 || Value != 255)) { 
     return 104; 
    } 
    byte[] send = new byte[]{27, 116, 1}; 
    send[2] = (byte)Value; 
    try { 
     out.write(send); 
     return 0; 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
     return 402; 
    } 
} 

這是我改變打印機的代碼頁(正因爲如此,我可以Qt代碼基本相同假設打印機命令集至少基本爲ESC/POS),所以我可以假定我處於正確的軌道上。現在,我使用Wireshark檢查了藍牙流量,但是,我找不到0x1b 0x74 18(命令更改代碼頁)發送到打印機的數據流。這可能是代碼頁沒有改變的原因,或者有人可以給我一些指導嗎?我也嘗試將代碼頁更改爲Windows-1250ISO8859-2: Latin 2,沒有任何效果。

回答

1

問題似乎是,您沒有將您的UTF-8字符轉換爲輸出字符集。

QByteArray cmdSetCharSet; 
cmdSetCharSet.resize(3); 
cmdSetCharSet[0] = 0x1b; 
cmdSetCharSet[1] = 0x74; 
cmdSetCharSet[2] = 0x2; //OEM850 

this->ueBtPrinterSocket()->write(cmdSetCharSet); 

QTextCodec *codec = QTextCodec::codecForName("IBM850"); 
this->ueBtPrinterSocket()->write(codec->fromUnicode(QString("ÄäÖöÜüß$€")));