在热敏小票上打印条形码和QR Code - xiaohao0576/odoo-doc GitHub Wiki

打印条形码

https://mydomain.odoo.com/report/barcode/EAN13/2388801035215?width=285&height=120&humanreadable=1&quiet=0

宽度285,是黄金宽度,不要包含静区,quiet=0

你可能觉得 576 像素的纸很宽,285 像素只有一半。但请记住:条码不是照片,不是铺满全幅就好。如果设为 500 像素,打印机会产生锯齿(有的条 5 像素,有的条 6 像素),导致扫描枪报错。如果设为 285 像素:最窄条恒定为 3 像素。这是物理上的完美匹配。


打印QR Code

如果使用epos打印机,由于打印前,驱动会对图像进行抖动二值化处理,条码码影响不大,但二维码就有可能识别不出来,所以需要改造以下文件

https://github.com/odoo/odoo/blob/19.0/addons/point_of_sale/static/src/app/utils/printer/epson_printer.js

改造思路

  1. 使用Odoo的前端patch机制,继承扩展javascript的功能
  2. 需要改造processCanvas(canvas)canvasToRaster(canvas) , 要做成await,async异步调用
  3. 使用odoo自带的BrowserCodeReader函数来识别二维码的区域,文件名是odoo/addons/web/static/lib/zxing-library/zxing-library.js
  4. 获得二维码域名后,改造canvasToRaster函数,让这个函数在二维码区域内不做抖动变化