Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

POS小票打印输出的流程解释,顺便求助ESCPOS指令中的删除线



  • 先贡献后求助。。。<br /><br />POS小票打印输出的基本流程如下:<br /><br />小票输出部分的定义在【addons/point_of_sale/static/src/xml/pos.xml】中的<t t-name="XmlReceipt">便签内,很容易读懂,但是同样一个文件,只有这个地方的定义和其他部分是不同的,因为这个部分是会输出给【addons/hw_escpos】进行解析后打印的,这个打印和你生成的PDF打印完全是不同的逻辑,生产环境下必须搞定POSBOX,用PDF这种方法打印太无法上台面,也不利于后期扩展和维护。<br /><br />然后再解释一下这个地方的语法特别的地方,这里面不能自己乱用HTML标签,本来我想要加个下划线把原始未打折价格显示出来,这个一般来讲很简单嘛,加个<s>标签就搞定了,因为相同文件,其他地方的模板(主要是屏幕显示用和PDF打印用的部分)都是这么简单的解决的。但是结果我用了<s>标签后,小票机输出的时候直接忽略了<s>中的东东,经过测试是因为hw_escpos模块根本不认这个标签,直接过滤掉了,后来就去查了一下hw_escpos模块的具体定义,发现他接受的标签很少,像b,em,line,left,right...这些都是可以接受的,但我死活找不到设定删除线的方法,后来再仔细看了看,找到了下面这些ESCPOS的打印指令,之前研究posbox的时候接触过,所以基本看得明白:<br />------------------------------------------------<br /># Text format  <br />TXT_NORMAL      = '\x1b\x21\x00' # Normal text<br />TXT_2HEIGHT    = '\x1b\x21\x10' # Double height text<br />TXT_2WIDTH      = '\x1b\x21\x20' # Double width text<br />TXT_DOUBLE      = '\x1b\x21\x30' # Double height & Width<br />TXT_UNDERL_OFF  = '\x1b\x2d\x00' # Underline font OFF<br />TXT_UNDERL_ON  = '\x1b\x2d\x01' # Underline font 1-dot ON<br />TXT_UNDERL2_ON  = '\x1b\x2d\x02' # Underline font 2-dot ON<br />TXT_BOLD_OFF    = '\x1b\x45\x00' # Bold font OFF<br />TXT_BOLD_ON    = '\x1b\x45\x01' # Bold font ON<br />TXT_FONT_A      = '\x1b\x4d\x00' # Font type A<br />TXT_FONT_B      = '\x1b\x4d\x01' # Font type B<br />TXT_ALIGN_LT    = '\x1b\x61\x00' # Left justification<br />TXT_ALIGN_CT    = '\x1b\x61\x01' # Centering<br />TXT_ALIGN_RT    = '\x1b\x61\x02' # Right justification<br />TXT_COLOR_BLACK = '\x1b\x72\x00' # Default Color<br />TXT_COLOR_RED  = '\x1b\x72\x01' # Alternative Color ( Usually Red )<br />---------------------------------------------------<br />这里就很清楚了,他是怎么定义ESCPOS的原始指令集的,但是这里面没有找到删除线的定义,所以我就去查了一下ESCPOS的指令集,找到了删除线的定义:<br />ESC ! n <br />格式:  十六进制:1B 21 n<br />位0:设置打印字体(0:24x24中文 1:16x16中文) <br />位1:保留 <br />位2:保留  <br />位3:1:字体加粗 <br />位4:1:双倍高度<br />位5:1:双倍宽度 <br />位6:1:删除线 <br />位7:1:下划线<br /><br />终于找到这个该死的删除线了,以粗体为例,odoo中设定的是\x1b\x45\x01,<br />然并卵。。。16进制什么的完全不懂,求大神帮忙解读,我应该怎么设定这个删除线的指令。



  • 先贡献后求助。。。<br /><br />POS小票打印输出的基本流程如下:<br /><br />小票输出部分的定义在【addons/point_of_sale/static/src/xml/pos.xml】中的<t t-name="XmlReceipt">便签内,很容易读懂,但是同样一个文件,只有这个地方的定义和其他部分是不同的,因为这个部分是会输出给【addons/hw_escpos】进行解析后打印的,这个打印和你生成的PDF打印完全是不同的逻辑,生产环境下必须搞定POSBOX,用PDF这种方法打印太无法上台面,也不利于后期扩展和维护。<br /><br />然后再解释一下这个地方的语法特别的地方,这里面不能自己乱用HTML标签,本来我想要加个下划线把原始未打折价格显示出来,这个一般来讲很简单嘛,加个<s>标签就搞定了,因为相同文件,其他地方的模板(主要是屏幕显示用和PDF打印用的部分)都是这么简单的解决的。但是结果我用了<s>标签后,小票机输出的时候直接忽略了<s>中的东东,经过测试是因为hw_escpos模块根本不认这个标签,直接过滤掉了,后来就去查了一下hw_escpos模块的具体定义,发现他接受的标签很少,像b,em,line,left,right...这些都是可以接受的,但我死活找不到设定删除线的方法,后来再仔细看了看,找到了下面这些ESCPOS的打印指令,之前研究posbox的时候接触过,所以基本看得明白:<br />------------------------------------------------<br /># Text format  <br />TXT_NORMAL      = '\x1b\x21\x00' # Normal text<br />TXT_2HEIGHT    = '\x1b\x21\x10' # Double height text<br />TXT_2WIDTH      = '\x1b\x21\x20' # Double width text<br />TXT_DOUBLE      = '\x1b\x21\x30' # Double height & Width<br />TXT_UNDERL_OFF  = '\x1b\x2d\x00' # Underline font OFF<br />TXT_UNDERL_ON  = '\x1b\x2d\x01' # Underline font 1-dot ON<br />TXT_UNDERL2_ON  = '\x1b\x2d\x02' # Underline font 2-dot ON<br />TXT_BOLD_OFF    = '\x1b\x45\x00' # Bold font OFF<br />TXT_BOLD_ON    = '\x1b\x45\x01' # Bold font ON<br />TXT_FONT_A      = '\x1b\x4d\x00' # Font type A<br />TXT_FONT_B      = '\x1b\x4d\x01' # Font type B<br />TXT_ALIGN_LT    = '\x1b\x61\x00' # Left justification<br />TXT_ALIGN_CT    = '\x1b\x61\x01' # Centering<br />TXT_ALIGN_RT    = '\x1b\x61\x02' # Right justification<br />TXT_COLOR_BLACK = '\x1b\x72\x00' # Default Color<br />TXT_COLOR_RED  = '\x1b\x72\x01' # Alternative Color ( Usually Red )<br />---------------------------------------------------<br />这里就很清楚了,他是怎么定义ESCPOS的原始指令集的,但是这里面没有找到删除线的定义,所以我就去查了一下ESCPOS的指令集,找到了删除线的定义:<br />ESC ! n <br />格式:  十六进制:1B 21 n<br />位0:设置打印字体(0:24x24中文 1:16x16中文) <br />位1:保留 <br />位2:保留  <br />位3:1:字体加粗 <br />位4:1:双倍高度<br />位5:1:双倍宽度 <br />位6:1:删除线 <br />位7:1:下划线<br /><br />终于找到这个该死的删除线了,以粗体为例,odoo中设定的是\x1b\x45\x01,<br />然并卵。。。16进制什么的完全不懂,求大神帮忙解读,我应该怎么设定这个删除线的指令。



  • 胡乱尝试终于找到规律了。。。<br />那个位数就是对应8个00000000<br />所以删除线的对应序列应该是00000010<br /><br />然后最关键的来了,我本来以为是2进制转16进制。。。结果反复尝试发现应该是2进制转4进制。。我去。。。还是学的太少啊,对这个实在没什么研究,只能瞎撞撞出来。<br />所以删除线对应的正确编码应该是<br /><br />1B 21 02<br /><br />明天去单位测试,预祝成功!成功了我一定来报喜!



  • 今天上午逛官方社区,<br />https://www.odoo.com/forum/help-1/question/french-tutorial-module-creation-pos-modification-25396<br />发现有人写了个 pos相关的开发文档:<br /><br />[url=http://thierry-godin.developpez.com/openerp/tutorial-module-creation-pos-modification-english-version/#]http://thierry-godin.developpez.com/openerp/tutorial-module-creation-pos-modification-english-version/#[/url]<br /><br />您看看 有没有 有帮助的地方。<br />



  • 嗯.... 按上面的位数说明...<br />就是  \x1b\x21\x02<br /><br />恭喜... 能分享一下比较完整的 escpos 指令集吗? 可以 PO 到官网, 这样, 下一版本就可以支持更多的 ESCPOS指令了...



  • EPSON ESC/P Reference Manual



  • 感谢.....


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待