高分求助关于ESC/POS命令的使用

我想打印一个10行10列(句中)的表格.

每个单元格内需要填写1到2个字符.

请问这个命令的思路是怎样的? 请给出示例代码
命令集倒是很容易找到..关键是不知道怎么组织使用命令.

我要的.只是单纯针对这个问题.解决的代码

一定要采纳啊!!

ESC/POS命令集

切纸指令:

发送:十六进制:1B69

4.1 基本控制指令

4.1.1 ESC @

[名称] 初始化打印机

[格式] ASCII码 ESC @

十六进制码 1B 40

十进制码 27 64

[描述] 清除打印缓冲区中的数据,复位打印机打印参数到当打印机缺省参数。

[注意] * 不是完全恢复到出厂设置,用户参数设置(见三、JPM112打印机工具软件)不会被更改。

[例子] char SendStr[3];

SendStr[0] = 0x1B

SendStr[1] = 0x40;

PrtSendData(SendStr, 2);

4.1.2 FF

[名称] 打印并走纸到下页首

[格式] ASCII码 FF

14/53

----------------------- 16-----------------------

用户文档 JPM112 打印机开发手册(V1.0 )

十六进制码 0C

十进制码 12

[描述] 将打印缓冲区中的数据全部打印出来并返回标准模式。

[注意] * 打印后,删除打印缓冲区中的数据。

* 该命令设置打印位置为行的起始点。

* 如果打印纸有预印刷黑标,则打印缓冲区中的数据后,走纸到黑标处,如果打印纸无黑标,则

走纸0.5m后停止,预印刷黑标的规范请见附录B.预印刷黑标说明。

[例子] char SendStr[2];

SendStr[0] = 0x0C;

PrtSendData( SendStr, 1);

4.1.3 LF

[名称] 打印并换行

[格式] ASCII码 LF

十六进制码 0A

十进制码 10

[描述] 把打印缓冲区中的数据打印出来,并换行。

[注意] * 该命令把打印位置设置为行的开始位置。

[参考] CR

[例子] char SendStr[2];

SendStr[0]=’\n’; //C语言中’\n’即为换行

PrtSendData( SendStr, 1);

4.1.4 CR

[名称] 打印并回车

[格式] ASCII码 CR

十六进制码 0D

十进制码 13

[描述] 打印但不进纸。

[注意] * 打印结束后,将下一行的开始设定为打印起始位置。

[参考] LF

[例子] char SendStr[2];

SendStr[0]=’\r’; //C语言中’\r’即为回车

PrtSendData(SendStr,1);

15/53

----------------------- 17-----------------------

用户文档 JPM112 打印机开发手册(V1.0 )

4.1.5 ESC J n

[名称] 打印并进纸

[格式] ASCII码 ESC J n

十六进制码 1B 4A n

十进制码 27 74 n

[范围] 0 ≤ n ≤ 255

[描述] 打印输出打印缓冲区中的数据,并进纸n个 垂直点距。

[注意] * 打印结束后,将下一行的开始设定为打印起始位置。

* 一个垂直点距为0.33mm,以下同。

[参考] ESC d

[例子] char SendStr[4];

SendStr[0] = 0x1B;

SendStr[1] = ’J’;

SendStr[2] = 3;

PrtSendData( SendStr, 3);//走纸1mm

4.1.6 ESC d n

[名称] 打印并进纸n 行

[格式] ASCII码 ESC d n

十六进制码 1B 64 n

十进制码 27 100 n

[范围] 0 ≤ n ≤ 255

[描述] 打印打印缓冲区中的数据并进纸n字符行。

[注意] * 该命令设置打印起始位置为行起点。

[参考] ESC J

[例子] char SendStr[4];

SendStr[0] = 0x1B;

SendStr[1] = ’d’;

SendStr[2] = 2;

PrtSendData( SendStr, 3);//走纸2行

4.1.7 HT

[名称] 移动打印位置到下一个水平制表位置

[格式] ASCII码 HT

十六进制码 09

十进制码 9

[描述] 移动打印位置到下一个水平制表位置。

16/53

----------------------- 18-----------------------

用户文档 JPM112 打印机开发手册(V1.0 )

[注意] * 通过ESC D命令设置水平制表位的位置。

* 如果没有设置下一个水平制表位置,则该命令被忽略。

* 水平定位位置的缺省设定为字符A(6×12)的8个字符宽度(第9,17,25, … 列)。

[参照] ESC D

[例子] char NextPos = 9;

PrtSendData(“商品名”,6);

PrtSendData(&NextPos,1);

PrtSendData(“单价”,4);

PrtSendData(&NextPos,1);

PrtSendData(“数量”,4);

PrtSendData(&NextPos,1);

PrtSendData(“金额”,4);

4.1.8 FS U nL nH

[名称] 按Unicode编码向打印发送数据

[格式] ASCII码 FS U nL nH

十六进制码 1C 55 nL nH

十进制码 28 85 nL nH

[描述] 打印n(n=nL+nH*256)个Unicode编码字符。

[注意] * 因Unicode是双字节编码,此命令后的2*n(n=nL+nH*256)个字节被当作Unicode编码字符处理;

* 该指令中输入的汉字只支持GBK字库中包含的汉字,没有包含Unicode中所包含的所有汉字;

* 有关GBK的详细信息请参阅全国信息技术标准化技术委员会制定的 “汉字内码扩展规范”;

* 有关Unicode的详细信息可以参见Unicode的官方网站http://www.unicode.org

* 本命令不受汉字命令的影响,也不受自定义字符命令的影响;

* 本命令可以嵌入其他ESC/GS/FS指令,但要采用Unicode编码。

[例子] char SendStr[64];

SendStr[0]=0x1C; SendStr[1]=’U’; SendStr[2]=11; SendStr[3]=0;

SendStr[4]=0x55; SendStr[5]=0x00; //U+0055:’U’

SendStr[6]=0x4E; SendStr[7]=0x00; //U+004E:’N’

SendStr[8]=0x49; SendStr[9]=0x00; //U+0049:’I’

SendStr[10]=0x43; SendStr[11]=0x00; //U+0043:’C’

SendStr[12]=0x4F; SendStr[13]=0x00; //U+004F:’O’

SendStr[14]=0x44; SendStr[15]=0x00; //U+0044:’D’

SendStr[16]=0x45; SendStr[17]=0x00; //U+0045:’E’

SendStr[18]=0x53; SendStr[19]=0x62; //U+6253:’打’

SendStr[20]=0x70; SendStr[21]=0x53; //U+5370:’印’

SendStr[22]=0x4B; SendStr[23]=0x6D; //U+6D4B:’测’

SendStr[24]=0xD5; SendStr[25]=0x8B; //U+8BD5:’试’

PrtSendData(SendStr,26);

PrtSendData(“\n”,1);

17/53

----------------------- 19-----------------------

用户文档 JPM112 打印机开发手册(V1.0 )

4.2 字符参数设置命令

4.2.1 ESC ! n

[命令] 选择打印模式

[格式] ASCII码 ESC ! n

十六进制码 1B 21 n

十进制码 27 33 n

[范围] 0 ≤ n ≤ 255

[描述] 通过指定参数n 的值选择打印模式。参数n 的定义如下:

位 值 意义

0 0 西文字符 (半宽)字体A (6 ×12),汉字字符 (全宽)字体A (12×12)

1 西文字符 (半宽)字体B (8×16),汉字字符 (全宽)字体B (16×16)

1 - 未定义

2 - 未定义

3 0 取消粗体模式

1 设置粗体模式

4 0 取消倍高模式

1 设置倍高模式

5 0 取消倍宽模式

1 设置倍宽模式

6 - 未定义

7 0 取消下划线模式

1 设置下划线模式

[注意] * 当同时选择倍高及倍宽模式时,则打印出四倍大小字符。

* 打印机可以为所有字符加下划线,但不能为由HT命令产生的空白或顺时针旋转90°的字符加下划

线。

* 当一行中有一些倍高或更高字符时,行中所有字符都沿基线对齐。

* ESC M也可设定字体。最后接收到的命令的设定有效。

* ESC E也可设定或取消粗体模式。最后接收到的命令的设定有效。

* ESC –也可设定或取消下划线模式,最后接收到的命令的设定有效。

* GS !也可设定字符大小。最后接收到的命令的设定有效。

* 本命令对英数字符和汉字都有效。

[缺省值] n = 0

[参照] ESC -, ESC E, GS !, ESC M

[例子] char SendStr[4];

SendStr[0] = 0x1B;

SendStr[1] = ’!’;

SendStr[2] = 0x28;// 00101000 倍宽粗体

PrtSendData( SendStr, 3);

18/53

----------------------- 20-----------------------

用户文档 JPM112 打印机开发手册(V1.0 )

4.2.2 GS ! n

[名称] 放大字符

[格式] ASCII码 GS ! n

十六进制码 1D 21 n

十进制码 29 33 n

[范围] 0 ≤ n ≤ 255 (1 ≤垂直倍数≤ 2, 1 ≤ 水平倍数≤ 2)

[描述] 用位0~3位选择字符高度,用位4~7位选择字符宽度,如下所示:

0 1 2 3 高度 4 5 6 7 宽度

0 0 0 0 1倍 0 0 0 0 1倍

1 0 0 0 2倍 1 0 0 0 2倍

[注意] * 该命令对所有字符(英数字符和汉字) 有效。

* 如果n 在定义范围之外,忽略该命令。

* 垂直方向是指进纸方向,水平方向与进纸方向垂直。然而,当字符方向顺时针旋转90°后,垂直

方向与水平方向之间的关系颠倒,也就是说本命令优先级低于于ESC V,当两个命令同时有效时,

字符显示是先旋转,再放大。

* 当字符以不同的尺寸在一行中放大时,一行中所有的字符沿基线对齐。

* 用ESC ! 命令也可以设置字符大小。以最后接收到的命令设置当前模式。

[缺省值] n = 0

[参考] ESC !

[例子] char SendStr[4];

SendStr[0] = 0x1D;

SendStr[1] = ’!’;

SendStr[2] = 0x01;// 00000001 倍高

PrtSendData( SendStr, 3);

4.2.3 ESC M n

[名称] 选择字符字体

[格式] ASCII码 ESC M n

十六进制码 1B 4D n

十进制码 27 77 n

[范围] n = 0, 1, 16, 17,18,19

[描述] 选择字符字体。

N(十进制) 意义

0 西文字符 (半宽)字体(6×12)

1 西文字符 (半宽)字体(8×16)

16 简体汉字字符字体12×12

19/53

----------------------- 21-----------------------

用户文档 JPM112 打印机开发手册(V1.0 )

17 简体汉字字符字体16×16

18 BIG5汉字字符字体12×12

19 BIG5汉字字符字体16×16

[注意] * ESC !也可设定字体。最后接收到的命令的设定有效。

* 当使用该命令设定字体时。可以分别设定西文字体和汉字字体,而且互不影响。

[参考] ESC !

[例子] char SendStr[8];

SendStr[0]=0x1B;

SendStr[1]=’M’;

SendStr[2]=0;// 西文6×12

SendStr[0]=0x1B;

SendStr[1]=’M’;

SendStr[2]=0x11;// 简体中文16×16

PrtSendData( SendStr, 6);//以后打印的中文字体为16×16,西文为6×12

4.2.4 ESC – n

[名称] 设置/取消下划线

[格式] ASCII码 ESC – n

十六进制码 1B 2D n

十进制码 27 45 n

[范围] 0 ≤ n ≤ 2

[描述] 基于以下的n值,设定 /解除下划线模式:

n(十进制) 意义

0 解除下划线模式

1 设定下划线模式(1 点粗)

2 设定下划线模式(2 点粗)

[注意] * 打印机不能给旋转字符以及反白字符打印下划线。

* 改变字符大小不影响当前下划线的粗细。

* 使用ESC !也可以设定或解除下划线模式。最后接收的命令设定有效。

* 该命令对英文和汉字字符都有效。

[缺省值] n = 0

[参照] ESC !

[例子] char SendStr[3];

SendStr[0] = 0x1B;

SendStr[1] = ’-’;

SendStr[2] = 1;//单行下划线

PrtSendData( SendStr, 3);

20/53

----------------------- 22-----------------------

用户文档 JPM112 打印机开发手册(V1.0 )

4.2.5 ESC E n

[名称] 设定/解除粗体打印

[格式] ASCII码 ESC E n

十六进制码 1B 45 n

十进制码 27 69 n

[范围] 0 ≤ n ≤ 255

[描述] 设定或解除粗体打印模式。

当n 的最低位(LSB)为0时,解除粗体打印模式。

当n 的最低位(LSB)为1时,设定粗体打印模式。

[注意] * 仅n 的最低有效位允许使用。

* 使用ESC !也可以设置或取消粗体模式。最后接收的命令设定有效。

[缺省值] n = 0

[参照] ESC !, ESC G

[例子] char SendStr[3];

SendStr[0] = 0x1B;

SendStr[1] = ’E’;

SendStr[2] = 1;//粗体

PrtSendData(SendStr,3);

4.2.6 ESC G n

[名称] 设定/解除重叠打印

[格式] ASCII码 ESC G n

十六进制码 1B 47 n

十进制码 27 71 n

[范围] 0 ≤ n ≤ 255

[描述] 设定或解除重叠打印模式。

当n 的最低有效位(LSB)为0时,解除重叠打印模式。

当n 的最低有效位(LSB)为1时,设定重叠打印模式。

[注意] * 仅n 的最低有效位允许使用。

* 在重叠模式和粗体模式中打印机输出是相同的。

[缺省值] n = 0

[参照] ESC E, ESC !

[例子] char SendStr[3];

SendStr[0] = 0x1B;

SendStr[1] = ’G’;

SendStr[2] = 1;//重叠

PrtSendData( SendStr, 3);

21/53

----------------------- 23-----------------------

用户文档 JPM112 打印机开发手册(V1.0 )

4.2.7 GS B n

[名称] 设定/解除反白打印模式

[格式] ASCII码 GS B n

十六进制码 1D 42 n

十进制码 29 66 n

[范围] 0 ≤ n ≤ 255

[描述] 设定或解除反白打印模式。

当n 的最低有效位为0时,关闭反白模式。

当n 的最低有效位为1时,打开反白模式。

[注意] * 仅n 的最低位有效。

* 该命令对内置字符和用户自定义字符均有效。

* 反白模式打开时,它对ESC SP设定的空白也有效。

* 该命令不影响位图,用户自定义位图,条形码,条码显示字符和由HT, ESC $, 及ESC \ 跳过的

间距。

* 反白模式优先于下划线模式。选择反白模式时,即使下划线模式打开也被禁止(但不取消)。

[缺省值] n = 0

[例子] char SendStr[3];

SendStr[0] = 0x1D;

SendStr[1] = ’B’;

SendStr[2] = 1;//反白

PrtSendData( SendStr, 3);

4.2.8 ESC V n OK

[名称] 设置/解除字符旋转模式

[格式] ASCII码 ESC V n

十六进制码 1B 56 n

十进制码 27 86 n

[范围] 0 ≤ n ≤ 3

[描述] 设置/解除字符旋转模式

N (十进制) 意义

0 解除旋转模式

1 设置90°顺时针旋转模式

2 设置180°顺时针旋转模式

3 设置270°顺时针旋转模式

[注意] * 当设置了下划线模式时,对于顺时针90°旋转的字符,打印机不加下划线。

* 在 旋转模式下,倍宽和倍高命令放大字符的方向与一般模式下倍高倍宽命令放大字符的方向相

反。

[缺省值] n = 0

22/53

----------------------- 24-----------------------

用户文档 JPM112 打印机开发手册(V1.0 )

[参照] ESC !, ESC –

[例子] char SendStr[3];

SendStr[0] = 0x1B;

SendStr[1] = ’V’;

SendStr[2] = 2;//旋转180度

PrtSendData( SendStr, 3);

4.3 打印排版参数设置命令

4.3.1 ESC $ nL nH

[名称] 设置绝对打印位置

[格式] ASCII码 ESC $ nL nH

十六进制码 1B 24 nL nH

十进制码 27 36 nL nH

[范围] 0 ≤ nL ≤ 255

0 ≤ nH ≤ 255

[描述] 设定从一行的开始到将要打印字符的位置之间的距离。

从一行的开始到打印位置的距离为N个水平点距。

nL nH是双字节无符号整数N的低位和高位,N=nL + nH × 256

[注意] * 如果设定的打印位置超出了可打印区域(N>244),则被设置为可打印区域的最大值 (N=244)。

[参照] ESC \

[例子] char SendStr[4];

SendStr[0] = 0x1B;
SendStr[1] = ’$’;

SendStr[2] = 15;//0.2×15=3

PrtSendData( SendStr, 3); //绝对位置设为距左边界3毫米(15水平点距)
PrtSendData( “从左侧3毫米处开始打印\n”, 22);

4.3.2 ESC D n1 n2…nk NULL

[名称] 设置水平制表位

[格式] ASCII码 ESC D n1…nk NULL

十六进制码 1B 44 n1…nk 00

十进制码 27 68 n1…nk 0

[范围] 1 ≤ n ≤ 255 0 ≤ k ≤ 8

[描述] 设置水平定位位置。

n 指定从一行开始的列号,用来设置水平定位位置。

k 表示将被设置水平定位点的总数。

[注意] * 水平制表位置作为一个值储存,这个值为n个西文字符宽度,是从行的开始测量的。字符宽度包

一定要采纳啊!!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-07-25
POS机打印涉及的内容很专业,给个网址参考吧,希望对你有帮助。(该地址较详细地说明了ESC/POS指令集的使用,包括范例)

参考资料:http://hi.baidu.com/lzycome/blog/item/1e43c0da5ad58dd8b6fd48ce.html

本回答被提问者采纳
第2个回答  2009-07-26
// ESC * m n1 n2 打印图形点阵 正方形
cmd[0]=27;
cmd[1]=51;
cmd[2]=16;
WriteData(cmd,3);
cmd[0]=27;
cmd[1]=42;
cmd[2]=0;
cmd[3]=16;
cmd[4]=0;
cmd[5]=255;
for (int i=6;i<20;i++)
cmd[i]=128;
cmd[20]=255;
cmd[21]=10;
WriteData(cmd,22);
for (i=6;i<20;i++)
cmd[i]=1;
WriteData(cmd,22);
cmd[0]=10;
cmd[1]=10;
cmd[2]=10;
WriteData(cmd,3);
相似回答