为了在小票上打印二维码,折腾了好多天,终于搞定了,现将关键点做个记录。
- 二维码的打印,首先是根据内容生成二维码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;