Test.txt内容:
参考打印到文档功能:
初识打印机驱动
http://www.cnblogs.com/MrDing/p/4078189.html
热敏打印头打印原理和C实现黑白位图的放大
https://www.jianshu.com/p/c754bfa377e4
ascii码 :
十六进制 | 十进制 | 字符 | 含义 |
---|---|---|---|
0a | 10 | \n | LF |
0d | 13 | \r | CR |
1b | 27 | esc | |
1d | 29 | gs |
热敏打印机参数:
首先佳博GP-L80180I票据打印机技术参数
打印方式 | 直接热敏式 |
---|---|
打印密度 | 576点/行或512点/行 |
打印速度 | 180毫米/秒 |
接口类型 | 串口+USB+网口 |
打印纸宽 | 79.5±0.5毫米 |
纸张厚度 | 0.06~0.08毫米 |
纸卷外径 | 83毫米 |
可靠性 | 100公里 |
使用字库 | 简体中文GB18030大字库 |
条形码类型 | UPC-A/UPC-E/JAN13(EAN13)/JAN8(EAN8)/CODE39/ITF/CODABAR/CODE93/CODE128 |
字符大小 | ANK字符:FontA:12×24点 FontB:9×17点 简体/繁体:24×24点 |
打印命令 | 兼容ESC/POS命令 |
log与流程的对应关系:
对应的代码如下:
// 打印头宽度约为 80mm 的打印函数
BOOL USB_GPL801_PrintInStandardMode80(void)
{
int ret ;
ret = VC_POS_Reset();
printf("VC_POS_Reset ret = %d\r\n",ret);
VC_POS_FeedLine();
VC_POS_FeedLine();
//VC_POS_PreDownloadBmpToRAM("a.BMP",3);
ret = VC_POS_PreDownloadBmpToRAM("Kitty.bmp",3);
printf("VC_POS_PreDownloadBmpToRAM ret = %d\r\n",ret);
int nRet = VC_POS_SetMotionUnit(180, 180);
if(POS_SUCCESS != nRet)
{
return false;
}
VC_POS_SetMode(POS_PRINT_MODE_STANDARD);
VC_POS_FeedLine();
VC_POS_FeedLine();
VC_POS_FeedLine();
VC_POS_S_TextOut("通行卡ID:", 70, 1, 1, POS_FONT_TYPE_CHINESE,
POS_FONT_STYLE_NORMAL);
VC_POS_S_TextOut("3303000012345678", 190, 1, 1, POS_FONT_TYPE_CHINESE,
POS_FONT_STYLE_NORMAL);
VC_POS_FeedLine();
VC_POS_S_TextOut("入口时间:", 70, 1, 1, POS_FONT_TYPE_CHINESE,
POS_FONT_STYLE_NORMAL);
VC_POS_S_TextOut("2018-04-20 10:10:10", 190, 1, 1, POS_FONT_TYPE_CHINESE,
POS_FONT_STYLE_NORMAL);
VC_POS_FeedLine();
VC_POS_S_TextOut("金额:", 70, 1, 1, POS_FONT_TYPE_CHINESE,
POS_FONT_STYLE_NORMAL);
VC_POS_S_TextOut("86.00元", 190, 1, 1, POS_FONT_TYPE_CHINESE,
POS_FONT_STYLE_NORMAL);
VC_POS_FeedLine();
VC_POS_S_TextOut("车牌:", 70, 1, 1, POS_FONT_TYPE_CHINESE,
POS_FONT_STYLE_NORMAL);
VC_POS_S_TextOut("鲁A66001[蓝色]", 190, 1, 1, POS_FONT_TYPE_CHINESE,
POS_FONT_STYLE_NORMAL);
VC_POS_FeedLine();
VC_POS_FeedLine();
//VC_POS_S_PrintBmpInRAM(3,20,POS_BITMAP_PRINT_NORMAL);
VC_POS_S_PrintBmpInRAM(3,20,POS_BITMAP_PRINT_QUADRUPLE);
VC_POS_FeedLine();
VC_POS_FeedLine();
VC_POS_FeedLine();
VC_POS_FeedLine();
VC_POS_FeedLine();
VC_POS_FeedLine();
// 切纸
VC_POS_CutPaper(POS_CUT_MODE_FULL, 0);
return TRUE;
}
设置的太小,容易丢数据
log如下:
打印出来的效果如下:
下面开始分析:
1b 40
0a 0a —– 两次换行
1d 23 03
应该是 定义 ID号为03
![](/qrcode.jpg)
1d 2a 10 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
x = 0x10
y = 0x06
下面的是位图数据:
101x46像素
这个文件头 54个字节 可能是理解不对
发送的数据 和 bmp 的数据 有点不一致 ,有空分析一下
16 x 6 x 8 = 768个字节
24 x 32 = 768 字节
继续下面的操作:
1d 50 b4 b4 1b 53 0a 0a 0a
1b 24 46 00 1b 4d 03
1d 42 00
1d 62 00
1d 21 00
1b 45 00
1b 7b 00
1b 2d 00
1c 2d 00
1b 56 00
cd a8 d0 d0 bf a8 49 44 3a
1b 24 be 00
1b 4d 03
1d 42 00
1d 62 00
1d 21 00
1b 45 00
1b 7b 00
1b 2d 00
1c 2d 00 1b 56 00
33 33 30 33 30
30 30 30 31 32 33 34 35 36 37 38 0a
1b 24 46 00
1b 4d 03 1d 42 00 1d 62 00 1d 21 00 1b 45 00 1b
7b 00 1b 2d 00 1c 2d 00 1b 56 00
c8 eb bf da ca b1 bc e4 3a
1b 24 be 00 1b 4d 03 1d 42 00 1d 62
00 1d 21 00 1b 45 00 1b 7b 00 1b 2d 00 1c 2d 00 1b 56 00
32 30 31 38 2d 30 34 2d 32 30 20 20 31
30 3a 31 30 3a 31 30 0a
1b 24 46 00 1b 4d 03 1d 42 00 1d 62 00 1d 21 00 1b 45 00 1b 7b 00 1b 2d
00 1c 2d 00 1b 56 00 bd f0 b6 ee 3a
1b 24 be 00 1b 4d 03 1d 42 00 1d 62 00 1d 21 00 1b 45 00 1b
7b 00 1b 2d 00 1c 2d 00 1b 56 00 38 36 2e 30 30 d4 aa 0a
1b 24 46 00
1b 4d 03 1d 42 00 1d 62 00
1d 21 00 1b 45 00 1b 7b 00 1b 2d 00 1c 2d 00 1b 56 00 b3 b5 c5 c6 3a
1b 24 be 00
1b 4d 03 1d 42
00 1d 62 00 1d 21 00 1b 45 00 1b 7b 00 1b 2d 00 1c 2d 00
1b 56 00
c2 b3 41 36 36 30 30 31 5b c0
b6 c9 ab 5d 鲁A66001[蓝色]
0a 0a
1b 24 14 00 1d 23 03 1d 2f 03 0a 0a 0a 0a 0a 0a 1d 56 00
1d 50 b4 b4
1b 53
1b 24 46 00
0x46 = 70
1b 4d 03 选择中文 字体
1d 42 00
1d 62 00 —- 这个不知道
1d 21 00
1b 45 00
1b 7b 00
1b 2d 00
1c 2d 00
1b 56 00
cd a8 d0 d0 bf a8 49 44 3a
http://www.mytju.com/classcode/tools/encode_gb2312.asp
1b 24 be 00
VC_POS_S_PrintBmpInRAM(3,20,POS_BITMAP_PRINT_QUADRUPLE);
1b 24 14 00
1d 23 03 --- 选择ID 03
1d 2f 03 0a 0a 0a 0a 0a 0a 1d 56 00
1d 2f 03
1d 56 00
《佳博热敏票据打印机编程手册.pdf》有二维码指令
page49