ESC/POS指令的热敏小票打印机打印bmp纪要

本文记录了如何使用ESC/POS指令在热敏小票上打印二维码,关键在于将24位bmp二维码转换为单色图,并通过GS v 0 m xL xH yLyH d1...dk命令进行打印。首先,通过qrencode生成二维码bmp,然后调整尺寸以适应小票宽度,最后转换为单色位图,使用特定的打印机指令完成打印。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了在小票上打印二维码,折腾了好多天,终于搞定了,现将关键点做个记录。

  • 二维码的打印,首先是根据内容生成二维码bmp图片,这个我是通过网上找的一个叫qrencode的lib实现的,生成的bmp为24位的图片,我花费好多天没有成功的原因首先就是没搞清ESC/POS指令中关于位图打印的命令需要的是单色位图数据,还有对于命令中的宽度高度等参数没有搞清什么nL,nH的含义,原来是用两个自己来表示的一个数值(低8位和高8位,所以一般传的值就是x%256和x/256),搞清了这两点就是成功的关键。所以需要在qrencode生成的bmp基础上对位图进行调整后才能满足打印命令的需要。
  • 第一步就是对生成的24位二维码bmp进行尺寸修正,这个要视小票宽度来定,比如58mm的纸一般384点/行,两边预留一点的话,基本上最大就是344(此值一般定义为8的倍数,否则打印时补的位会是黑块),所以在调整时对于原始的bmp超过此值的话需要进行缩放至此值(bmp缩放可自行搜索,这个简单),调整好宽度后,再将24位图转换为单色图(1位,这个也不难)。
  • 经过第一步的调整后就可以读取并打印bmp了。我使用的是GS v 0 m xL xH yLyH d1...dk 这个命令来打印的,直接上代码了。此打印函数支持58mm和80mm,_nPaperType=0表示58mm,1表示80mm。其中的Write函数是向打印机写数据的。Feed是调用Write打印空行的。如下:

void printBmp(LPCSTR _file, BOOL _bCenter, int _nPaperType)
{
    long lWidth, lHeight;

1.1 ESC S0 设置字符倍宽打印 设置字符倍宽打印 设置字符倍宽打印 设置字符倍宽打印 ................................ ................................ ............. 3 1.2 ESC DC4 取消字符倍宽打印 取消字符倍宽打印 取消字符倍宽打印 取消字符倍宽打印 ................................ ................................ .......... 3 1.3 ESC SP n 设置字符右间距 设置字符右间距 设置字符右间距 ................................ ................................ ........... 3 1.4 ESC ! n 选择字符打印模式 选择字符打印模式 选择字符打印模式 选择字符打印模式 ................................ ................................ .......... 3 1.5 ESC $ nL nH 设置 绝对打印设置 绝对打印设置 绝对打印设置 绝对打印................................ .............................. 4 1.6 ESC – n 选择 /取消下划线模式 取消下划线模式 取消下划线模式 取消下划线模式 ................................ ................................ .. 4 1.7 ESC 2 设置默认行间距 设置默认行间距 设置默认行间距 设置默认行间距 设置默认行间距 ................................ ................................ ................... 4 1.8 ESC 3 n 设置行间距 设置行间距 设置行间距 ................................ ................................ ..................... 5 1.9 ESC @ 初始化打印机 初始化打印机 初始化打印机 ................................ ................................ ...................... 5 1.10 ESC B n t 控制蜂鸣器提示 控制蜂鸣器提示 控制蜂鸣器提示 控制蜂鸣器提示 ................................ ................................ ...... 5 1.11 ESC C m t n 控制蜂鸣器提示及指灯闪烁 控制蜂鸣器提示及指灯闪烁 控制蜂鸣器提示及指灯闪烁 控制蜂鸣器提示及指灯闪烁 控制蜂鸣器提示及指灯闪烁 控制蜂鸣器提示及指灯闪烁 控制蜂鸣器提示及指灯闪烁 ................................ ............. 5 1.12 ESC D n1... nk NUL 设置 横向跳格设置 横向跳格设置 横向跳格设置 横向跳格................................ ....................... 5 1.13 ESC E n 选择 /取消加粗模式 取消加粗模式 取消加粗模式 取消加粗模式 ................................ ................................ ........ 6 1.14 ESC G n 选择 /取消双重打印模式 取消双重打印模式 取消双重打印模式 取消双重打印模式 取消双重打印模式 ................................ ................................ 6 1.15 ESC J n 打印并走纸 打印并走纸 打印并走纸 n点行 ................................ ................................ .......... 6 1.16 ESC M n 选择字号 选择字号 选择字号 ................................ ................................ ........................ 6 1.17 ESC N n m 设置打印机参数并保存到 设置打印机参数并保存到 设置打印机参数并保存到 设置打印机参数并保存到 设置打印机参数并保存到 设置打印机参数并保存到 Flash中 ................................ ....... 7 1.18 ESC U n 设置字符倍宽 设置字符倍宽 设置字符倍宽 设置字符倍宽 ................................ ................................ ............... 7 1.19 ESC W n 设置字符倍宽高 设置字符倍宽高 设置字符倍宽高 设置字符倍宽高 设置字符倍宽高 ................................ ................................ ...... 7 1.20 ESC \ nL nH 设置 相对横向打印设置 相对横向打印设置 相对横向打印设置 相对横向打印设置 相对横向打印................................ ................... 8 1.21 ESC a n 选择对齐方式 选择对齐方式 选择对齐方式 选择对齐方式 ................................ ................................ .................. 8 1.22 ESC d n 打印并向前走纸 打印并向前走纸 打印并向前走纸 打印并向前走纸 n字符行 字符行 ................................ .............................. 8 1.23 ESC i 打印机全切纸 打印机全切纸 打印机全切纸 ................................ ................................ ........................ 8 1.24 ESC l o a d n1 n2 n3 n4 m1 m2 m3 … mk 升级新版固件 升级新版固件 升级新版固件 ..................... 9 1.25 ESC m 打印机半切纸 打印机半切纸 打印机半切纸 打印机半切纸 ................................ ................................ ...................... 9 1.26 ESC t n 设置代码页 设置代码页 设置代码页 ................................ ................................ ........................ 9 1.27 ESC v 查询打印机状态 查询打印机状态 查询打印机状态 查询打印机状态 ................................ ................................ .............. 10 1.28 ESC w 查询打印结果 查询打印结果 查询打印结果 查询打印结果 ................................ ................................ ................. 11 1.29 ESC { n 选择 /取消倒置打印模式 取消倒置打印模式 取消倒置打印模式 取消倒置打印模式 ................................ ............................... 11 第 2章 FS指令 ................................ ................................ ................................ ............................. 12 2.1 FS ! n 设置字符模式 设置字符模式 设置字符模式 ................................ ................................ ................... 12 2.2 FS - n 设置字符下划线 设置字符下划线 设置字符下划线 设置字符下划线 ................................ ................................ ............... 12 2.3 FS C n 设置字符编码格式 设置字符编码格式 设置字符编码格式 设置字符编码格式 ................................ ................................ .......... 12 2.4 FS W n 选择 /取消字符放大两倍打印 取消字符放大两倍打印 取消字符放大两倍打印 取消字符放大两倍打印 取消字符放大两倍打印 ................................ ........................ 13 第 3章 GS指令 ................................ ................................ ................................ .......................... 14
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值