# 打印排版
>优声云打印机使用自有排版系统,不兼容其他打印排版指令
[TOC]
## 内置排版指令
>为了让开发者更加方便的使用云打印,我们在系统内定制了一批常用的排版指令
1. 独立标签
>>`<N></N><MC></MC>`应当置于整个排版的前面
| 序号 |指令 |内容 | 说明|
| --- | --- | --- |--- |
| 1 | 多联次打印 |`<N>`{n}`</N> ` |{n}为实际的联数,支持`[1,9]`区间整数|
| 2 | 内容加高 |`<H{n}>`{data}`</H{n}> ` |{n}为实际的倍数,支持1或2,{data}为加高的内容,单行多行均有效 |
| 3 | 内容加宽 |`<W{n}>`{data}`</W{n}> ` |{n}为实际的倍数,支持1或2,{data}为加宽的内容,单行多行均有效 |
| 4 | 内容加大 |`<S{n}>`{data}`</S{n}> ` |{n}为实际的倍数,支持1或2,{data}为加大的内容,单行多行均有效 |
| 5 | 内容加粗 |`<B{n}>`{data}`</B{n}> ` |{n}为实际的倍数,支持1,{data}为加的内容,单行多行均有效 |
| 6 | 条形码 |`<BR>`{data}`</BR> ` |{data}为条码内容,CODE128A |
| 7 | 条形码 |`<BR2>`{data}`</BR2> ` |{data}为条码内容,CODE128B |
| 8 | 条形码 |`<BR3>`{data}`</BR3> ` |{data}为条码内容,CODE128C |
| 9 | 二维码 |`<QR>`{data}`</QR> ` |{data}为二维码扫码识别出来的内容,一般为http链接,长度不超过192字节,位置居中且不可修改 |
| 10 | 换行 |`<RN> ` |指令后的内容将无条件换行打印|
| 11 | 居中 |`<C>`{data}`</C> ` |{data}为居中内容|
| 12 | 居右 |`<R>`{data}`</R> ` |{data}为居右内容|
| 13 | 一行两列 |`<TR>`<br>`<TD>`{data1}`</TD><TD>`{data2}`</TD>`<br>`</TR> ` |{data}为两列内容|
| 14 | 一行三列 |`<TR>`<br>`<TD>`{data1}`</TD><TD>`{data2}`</TD><TD>`{data3}`</TD>`<br>`</TR> ` |{data}为三列内容|
| 15 | 语音提示 |`<MC>{n}</MC> ` |{n}为语音的标志, 目前支持:4:您有新的订单,5:您有新的美团外卖订单,6:您有新的饿了么外卖订单,请注意查收,7:您有客户退单,请及时处理(实际效果以打印机播报为准)|
***`<N></N><MC></MC>`应当置于整个排版的前面,注意当同时使用多个指令时,指令顺序保持一致***
2. 嵌套标签
| 序号 |指令 |内容 | 说明|
| --- | --- | --- |--- |
| 1 | 居中加大字体 |`<S{n}><C>`{data}`</C></S{n}> ` |{n}为实际的倍数,支持1或2 {data}为居中内容|
| 2 | 居右加大字体 |`<S{n}><R>`{data}`</R></S{n}> ` |{n}为实际的倍数,支持1或2 {data}为居右内容|
| 3 | 一行两列加大字体 |`<S{n}><TR>`<br>`<TD>`{data1}`</TD><TD>`{data2}`</TD>`<br>`</TR></S{n}> ` | {n}为实际的倍数,支持1或2 {data}为两列内容|
| 4 | 一行三列加大字体 |`<S{n}><TR>`<br>`<TD>`{data1}`</TD><TD>`{data2}`</TD><TD>`{data3}`</TD>`<br>`</TR></S{n}> ` |{n}为实际的倍数,支持1或2 {data}为三列内容|
**加粗标签可以和任意标签嵌套使用,使用时标签放在最外层**
**内容加高标签可以和任意标签嵌套使用,使用时标签放在最外层**
## 自定义排版
> 排版的需求是个性化的,上述指令也无法完全满足开发者的需要
打印机排版参数
1. 58mm纸宽的打印机一行能容纳32个字节
2. 打印机使用gbk编码,默认大小下,汉字占用2个字节,英语字母占用1个字节,空格占用1个字节
3. 打印机字符默认居左
4. 打印机字体的宽高只能使用内置指令处理
5. 自定义只能改变字符的位置
在此基础之上,我们可以很容易自定义排版
下面以 不同字体大小下使"您好"居中 举例说明
1.默认字体大小:
目标字符占用四个字节,要使其居中 ,需要在目标字符前面添加空格
空格数 = (32(纸宽)-4(自身宽度))/2 = 14
~~~
您好<RN>
~~~
2.`<S1></S1>`大小下:
目标字符占用六个字节,要使其居中 ,需要在目标字符前面添加空格
空格数 = (32(纸宽)-6(自身宽度))/2 = 13
~~~
<S1>您好</S1><RN>
~~~
3.`<S2></S2>`大小下:
目标字符占用八个字节,要使其居中 ,需要在目标字符前面添加空格
空格数 = (32(纸宽)-8(自身宽度))/2 = 12
~~~
<S2>您好</S2><RN>
~~~
## 字符支持
* 常用汉字
* 标点符号
* 阿拉伯数字
* 英语字母
* 运算符号:+-×÷%
* 货币符号¥
* 其余字符提供有限支持,请测试确认无误后再在生产环境使用
**不支持emoji表情符,请严格过滤菜品名称、用户备注等字段**
## 排版示例
* 美团外卖
```
<S2><C>#1美团外卖</C></S2>
<S1><C>*优声云(成都店)*</C></S1>
--------------------------------
<S2><C>[预订单]</C></S2>
<S2><C>--在线支付--</C></S2>
<H2>送达时间:10-17 07:40</H2><RN><H2>备注:[用餐人数1人]; 多放辣 多放辣 多放辣</H2><RN>下单时间:10-17 06:51
<RN>订单编号:10187153373368819<RN>********************************
<C>-----------1号口袋-----------</C>
<H2><TR><TD>豆腐花(豆腐花(加酸菜))</TD><TD>×1</TD><TD>3</TD></TR>
<TR><TD>鲜肉小笼包(小笼包(加辣))</TD><TD>×1</TD><TD>7</TD></TR></H2>
<B1>--------------其他--------------</B1>
餐盒费: ¥1
<RN>配送费: ¥4
<RN>折扣: ¥1
<RN>满10.0元减1.0元
<RN>********************************
原价:15
<RN> 总价:<S2>14</S2>
<RN>
<S2>故宫 (芒果网咖114号机)</S2>
<RN><S2>18333333333</S2>
<RN><S2>谢(女士)(门店新客户)</S2><RN>
```
* 饿了么
```
<S2><C>#1 饿了么</C></S2><S1><C>优声科技(成都店)</C></S1><S1><C>--在线支付--</C></S1><S2><C>[预订单]</C></S2><H2>送达:10-17 11:30<RN></H2>=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*<RN>下单时间:10-17 09:01<RN>订单编号:1227066340320969757<RN><H2><C>1号篮子</C><RN><TR><TD>脆笋腊肉饭</TD><TD>×1</TD><TD>21</TD></TR><TR><TD>冰红茶</TD><TD>×1</TD><TD>6</TD></TR><C>其它费用</C><RN><TR><TD>餐盒</TD><TD>×1</TD><TD>2</TD></TR></H2>********************************<RN><H2>配送费:3</H2><RN><H2>小计:32<RN></H2><H2>折扣:-14<RN></H2>********************************<RN><H2>总价:18</H2><RN><S1>天安门17楼</S1><RN><H2>丁** 182****8888</H2><RN><H2>隐私小号:13264100992,88</H2><RN>
```