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

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

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

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

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



  • 先贡献后求助。。。

    POS小票打印输出的基本流程如下:

    小票输出部分的定义在【addons/point_of_sale/static/src/xml/pos.xml】中的<t t-name="XmlReceipt">便签内,很容易读懂,但是同样一个文件,只有这个地方的定义和其他部分是不同的,因为这个部分是会输出给【addons/hw_escpos】进行解析后打印的,这个打印和你生成的PDF打印完全是不同的逻辑,生产环境下必须搞定POSBOX,用PDF这种方法打印太无法上台面,也不利于后期扩展和维护。

    然后再解释一下这个地方的语法特别的地方,这里面不能自己乱用HTML标签,本来我想要加个下划线把原始未打折价格显示出来,这个一般来讲很简单嘛,加个<s>标签就搞定了,因为相同文件,其他地方的模板(主要是屏幕显示用和PDF打印用的部分)都是这么简单的解决的。但是结果我用了<s>标签后,小票机输出的时候直接忽略了<s>中的东东,经过测试是因为hw_escpos模块根本不认这个标签,直接过滤掉了,后来就去查了一下hw_escpos模块的具体定义,发现他接受的标签很少,像b,em,line,left,right...这些都是可以接受的,但我死活找不到设定删除线的方法,后来再仔细看了看,找到了下面这些ESCPOS的打印指令,之前研究posbox的时候接触过,所以基本看得明白:
    ------------------------------------------------
    # Text format 
    TXT_NORMAL      = '\x1b\x21\x00' # Normal text
    TXT_2HEIGHT    = '\x1b\x21\x10' # Double height text
    TXT_2WIDTH      = '\x1b\x21\x20' # Double width text
    TXT_DOUBLE      = '\x1b\x21\x30' # Double height & Width
    TXT_UNDERL_OFF  = '\x1b\x2d\x00' # Underline font OFF
    TXT_UNDERL_ON  = '\x1b\x2d\x01' # Underline font 1-dot ON
    TXT_UNDERL2_ON  = '\x1b\x2d\x02' # Underline font 2-dot ON
    TXT_BOLD_OFF    = '\x1b\x45\x00' # Bold font OFF
    TXT_BOLD_ON    = '\x1b\x45\x01' # Bold font ON
    TXT_FONT_A      = '\x1b\x4d\x00' # Font type A
    TXT_FONT_B      = '\x1b\x4d\x01' # Font type B
    TXT_ALIGN_LT    = '\x1b\x61\x00' # Left justification
    TXT_ALIGN_CT    = '\x1b\x61\x01' # Centering
    TXT_ALIGN_RT    = '\x1b\x61\x02' # Right justification
    TXT_COLOR_BLACK = '\x1b\x72\x00' # Default Color
    TXT_COLOR_RED  = '\x1b\x72\x01' # Alternative Color ( Usually Red )
    ---------------------------------------------------
    这里就很清楚了,他是怎么定义ESCPOS的原始指令集的,但是这里面没有找到删除线的定义,所以我就去查了一下ESCPOS的指令集,找到了删除线的定义:
    ESC ! n
    格式:  十六进制:1B 21 n
    位0:设置打印字体(0:24x24中文 1:16x16中文)
    位1:保留
    位2:保留 
    位3:1:字体加粗
    位4:1:双倍高度
    位5:1:双倍宽度
    位6:1:删除线
    位7:1:下划线

    终于找到这个该死的删除线了,以粗体为例,odoo中设定的是\x1b\x45\x01,
    然并卵。。。16进制什么的完全不懂,求大神帮忙解读,我应该怎么设定这个删除线的指令。



  • 先贡献后求助。。。

    POS小票打印输出的基本流程如下:

    小票输出部分的定义在【addons/point_of_sale/static/src/xml/pos.xml】中的<t t-name="XmlReceipt">便签内,很容易读懂,但是同样一个文件,只有这个地方的定义和其他部分是不同的,因为这个部分是会输出给【addons/hw_escpos】进行解析后打印的,这个打印和你生成的PDF打印完全是不同的逻辑,生产环境下必须搞定POSBOX,用PDF这种方法打印太无法上台面,也不利于后期扩展和维护。

    然后再解释一下这个地方的语法特别的地方,这里面不能自己乱用HTML标签,本来我想要加个下划线把原始未打折价格显示出来,这个一般来讲很简单嘛,加个<s>标签就搞定了,因为相同文件,其他地方的模板(主要是屏幕显示用和PDF打印用的部分)都是这么简单的解决的。但是结果我用了<s>标签后,小票机输出的时候直接忽略了<s>中的东东,经过测试是因为hw_escpos模块根本不认这个标签,直接过滤掉了,后来就去查了一下hw_escpos模块的具体定义,发现他接受的标签很少,像b,em,line,left,right...这些都是可以接受的,但我死活找不到设定删除线的方法,后来再仔细看了看,找到了下面这些ESCPOS的打印指令,之前研究posbox的时候接触过,所以基本看得明白:
    ------------------------------------------------
    # Text format 
    TXT_NORMAL      = '\x1b\x21\x00' # Normal text
    TXT_2HEIGHT    = '\x1b\x21\x10' # Double height text
    TXT_2WIDTH      = '\x1b\x21\x20' # Double width text
    TXT_DOUBLE      = '\x1b\x21\x30' # Double height & Width
    TXT_UNDERL_OFF  = '\x1b\x2d\x00' # Underline font OFF
    TXT_UNDERL_ON  = '\x1b\x2d\x01' # Underline font 1-dot ON
    TXT_UNDERL2_ON  = '\x1b\x2d\x02' # Underline font 2-dot ON
    TXT_BOLD_OFF    = '\x1b\x45\x00' # Bold font OFF
    TXT_BOLD_ON    = '\x1b\x45\x01' # Bold font ON
    TXT_FONT_A      = '\x1b\x4d\x00' # Font type A
    TXT_FONT_B      = '\x1b\x4d\x01' # Font type B
    TXT_ALIGN_LT    = '\x1b\x61\x00' # Left justification
    TXT_ALIGN_CT    = '\x1b\x61\x01' # Centering
    TXT_ALIGN_RT    = '\x1b\x61\x02' # Right justification
    TXT_COLOR_BLACK = '\x1b\x72\x00' # Default Color
    TXT_COLOR_RED  = '\x1b\x72\x01' # Alternative Color ( Usually Red )
    ---------------------------------------------------
    这里就很清楚了,他是怎么定义ESCPOS的原始指令集的,但是这里面没有找到删除线的定义,所以我就去查了一下ESCPOS的指令集,找到了删除线的定义:
    ESC ! n
    格式:  十六进制:1B 21 n
    位0:设置打印字体(0:24x24中文 1:16x16中文)
    位1:保留
    位2:保留 
    位3:1:字体加粗
    位4:1:双倍高度
    位5:1:双倍宽度
    位6:1:删除线
    位7:1:下划线

    终于找到这个该死的删除线了,以粗体为例,odoo中设定的是\x1b\x45\x01,
    然并卵。。。16进制什么的完全不懂,求大神帮忙解读,我应该怎么设定这个删除线的指令。



  • 胡乱尝试终于找到规律了。。。
    那个位数就是对应8个00000000
    所以删除线的对应序列应该是00000010

    然后最关键的来了,我本来以为是2进制转16进制。。。结果反复尝试发现应该是2进制转4进制。。我去。。。还是学的太少啊,对这个实在没什么研究,只能瞎撞撞出来。
    所以删除线对应的正确编码应该是

    1B 21 02

    明天去单位测试,预祝成功!成功了我一定来报喜!



  • 今天上午逛官方社区,
    https://www.odoo.com/forum/help-1/question/french-tutorial-module-creation-pos-modification-25396
    发现有人写了个 pos相关的开发文档:

    [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]

    您看看 有没有 有帮助的地方。



  • 嗯.... 按上面的位数说明...
    就是  \x1b\x21\x02

    恭喜... 能分享一下比较完整的 escpos 指令集吗? 可以 PO 到官网, 这样, 下一版本就可以支持更多的 ESCPOS指令了...



  • EPSON ESC/P Reference Manual



  • 感谢.....


登录后回复
 

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