POSBOX 無法列印 QR Code

修改 escpos.py

sudo vim ~/odoo/addons/hw_escpos/escpos/escpos.py

依照此篇文章的介紹修改

https://github.com/fvdsn/py-xml-escpos/pull/6/files#diff-40c079194a34ca9b56a8d304d1eb20aeR832

重啟服務,就可以列印 Qr Code了

POSBOX 列印正體中文時會出現亂碼

使用樹莓派安裝 POSBOX V13 後,本以為接上熱感式印表機即可直接列印

接上國外買的 EPSON TM-T88V 後,印出的中文全都是方框

查了之後才知道國外的 EPSON 印表機是沒有內建中文字碼的

所以又上了露天拍賣買了一台中古的 EPSON TM-T88IV,到手後也確認過確實有內建正體中文字碼表(CP950 = BIG5)

哪知道中文字列印中來全部都變成了”控控控”

上網查了一些資料,才知道原來 py-xml-escpos 的作者因為查不到東南亞語系的相關資料

也無法測試(畢竟要購買當地的印表機才能測試),所以這部分並沒有完整支援

所幸對岸的同胞們早在一年前就遇到了相同的問題,也找到了解決方案:加入相對應的編碼即可

解決方法

遠端登入 POSBOX

ssh pi@posbox.ip

預設密碼為 admin

首先修改 constants.py
sudo vim /home/pi/odoo/addons/hw_escpos/escpos/constants.py

@ Line 78 加入下面兩行

TXT_ENC_PC936 = '\x1C\x21\x00' # PC936 GBK(Guobiao Kuozhan)
TXT_ENC_PC950 = '\x1C\x21\x00' # PC950 BIG5

然後修改 escpos.py

sudo vim /home/pi/odoo/addons/hw_escpos/escpos/escpos.py

@ Line 751 加入下面兩行

'cp936': TXT_ENC_PC936,
'cp950': TXT_ENC_PC950,

@ Line 766,正體中文選 CP950,簡體中文選 CP936

將
encoding = 'cp437' 
修改為
encoding = 'cp950'

重開 POSBOX,就可以正常列印正體中文了

注意事項

以下是修改時遇到的問題,在這邊寫出來,有遇到這個問題的人就不會一直鬼打牆了

  1. 印表機支援字碼表,簡體中文只支援 GB2312的不能用,要找支援 GB18030,連正體中文都包含進去了
  2. 需要修改的是 POSBOX 中的 xmlescpos 模組,而不是 Odoo 的 hw_escpos 模組
  3. POSBOX 中的 xmlescpos
    位於
    /home/pi/odoo/addons/hw_escpos/escpos/escpos.py
    而非
    /home/pi/py-xml-escpos/xmlescpos/escpos.py
    /home/pi/py-xml-escpos/build/lib.linux-armv6l-2.7/xmlescpos/escpos.py

參考資料

posBox模块通过树莓派的硬件盒子打印出来的中文出现乱码

连接posBox的热敏打印机page code是不是要有cp936才能正常打印中文

安裝 HW_ESCPOS 模組時出現錯誤 – No module named usb.core

安裝HW_ESCPOS 模組時出現以下錯誤

Error

Unable to install module "hw_escpos" because an external dependency is not met: No module named usb.core

安裝模組

sudo -H pip install pyserial
(Version = 3.0.1)

sudo -H pip install –pre pyusb
(Version = 1.0.0rc1)

sudo -H pip install qrcode
(Version = 5.2.2)

選擇安裝 hw_escpos 之後會卡在

XmlHttpRequestError

解決方案

因為使用虛擬機安裝ODOO時並沒有安裝 USB Controller

需要先新增 USB Controller (2.0 即可),重開機後即可正常安裝

 

參考資料

https://github.com/odoo/odoo/issues/2781