"api工厂" 使用手册

api接口开箱即用,云后台管理,助力前端,解放后端开发;

不懂编程也能独立开发应用,小步快跑,快速创业!

旨为更懂你!

云打印机模板变量详细说明

在系统参数设置 order_print_trigger_templete 中的打印内容模板,可使用下面的变量,具体说明如下:


语法


模板采用 freemarker 引擎解析,所以原生支持所有的 freemarker 语法,你可以自行百度一下  freemarker 语法的简单使用,包括如何判断、如何循环、如何格式化处理数据等等


标签支持


小票打印机


打印机使用标签(类似 html 格式)来格式化输出内容,具体说明如下:


<BR> :换行符
<CUT> :切刀指令(主动切纸,仅限切刀打印机使用才有效果) 
<LOGO> :打印LOGO指令(前提是预先在机器内置LOGO图片)
<PLUGIN> :钱箱或者外置音响指令
<CB></CB>:居中放大
<B></B>:放大一倍
<C></C>:居中
<L></L>:字体变高一倍
<W></W>:字体变宽一倍
<QR></QR>:二维码(单个订单,最多只能打印一个二维码)
<RIGHT></RIGHT>:右对齐
<BOLD></BOLD>:字体加粗


参考模板


<CB>${order.id} 号</CB><BR>
<RIGHT>${.now?datetime}</RIGHT><BR>
名称                数量 金额<BR>
--------------------------------<BR>
<#list goods as test>
${test.goodsName} ${test.property!""}   ${test.number}  ${test.amount}
</#list>
--------------------------------<BR>
合计:${order.amountReal}元<BR>
订单号:${order.orderNumber}<BR>
联系电话:0571-28180512<BR>
<QR>https://www.it120.cc/</QR>


标签机


<DIRECTION>n</DIRECTION> :
 设定打印时出纸和打印字体的方向,n 0 或 1,每次设备重启后都会初始化为 0 值设置,1:正向出纸,0:反向出纸,
 如<DIRECTION>1</DIRECTION> 

 <QR x="10"  y="100"  e="L"  w="5">二维码内容</QR>:
 打印二维码,其中属性x为水平方向起始点坐标(默认为0),属性y为垂直方向起始点坐标(默认为0),属性e为纠错等级:
 L 7%M 15%Q 25%H 30%(默认为K),属性w为二维码宽度(默认为5)

 <TEXT x="10" y="100" font="12" w="2" h="2" r="0">文本内容</TEXT>:
 打印文本,其中属性x为水平方向起始点坐标(默认为0),属性y为垂直方向起始点坐标(默认为0),属性font为字体:
 1、 8×12 dot 英数字体
 2、 12×20 dot 英数字体
 3、 16×24 dot 英数字体
 4、 24×32 dot 英数字体
 5、 32×48 dot 英数字体
 6、 14×19 dot 英数字体 OCR-B
 7、 21×27 dot 英数字体 OCR-B
 8、 14×25 dot 英数字体 OCR-A
 9、 9×17 dot 英数字体
 10、 12×24 dot 英数字体
 11、 繁体中文 24×24Font(大五码) 
 12、 简体中文 24×24Font(GB 码) 
 13、 韩文 24×24Font(KS 码)

 默认为12 简体中文 24×24Font(GB 码),属性w为文字宽度放大倍率1-10(默认为1),属性h为文字高度放大倍率1-10
 属性r为文字旋转角度(顺时针方向):
 0     0度
 90   90度
 180 180度
 270 270度
 (默认为0)

 <BC128 x="10" y="100" h="80" s="1" r="0" n="1" w="1">12345678</BC128>:打印code128一维码,其中属性x为水平
 方向起始点坐标(默认为0),属性y为垂直方向起始点坐标(默认为0),属性s是否人眼可识:0 不可识,1 可识(默认为1),
 属性n为窄 bar 宽度,以点(dot)表示(默认为1),属性w为宽 bar 宽度(默认为1),以点(dot)表示,属性r为文字旋转角度
 (顺时针方向):
 0     0度
 90   90度
 180 180度
 270 270度
 (默认为0)

 <BC39 x="10" y="100" h="80" s="1" r="0" n="1" w="1">12345678</BC39>:打印code39一维码,其中属性x为水平方向
 起始点坐标(默认为0),属性y为垂直方向起始点坐标(默认为0),属性s是否人眼可识:0 不可识,1 可识(默认为1),属性
 n为窄bar宽度,以点(dot)表示(默认为1),属性w为宽 bar 宽度(默认为2),以点(dot)表示,属性r为文字旋转角度(顺时针
 方向):
 0     0度
 90   90度
 180 180度
 270 270度
 (默认为0)

参考模版


<DIRECTION>1</DIRECTION>
<TEXT x="10" y="20" font="12">#001     五号桌    1/3</TEXT>
<TEXT x="70" y="80" font="12" w="2" h="2">可乐鸡翅</TEXT>
<TEXT x="10" y="180" font="12">张三先生  13800138000</TEXT>


可用变量


打印时间


${.now?string('yyyy-MM-dd HH:mm:ss')}


时间格式化参数说明:

  1. yyyy 为4位数的年份
  2. MM 为2位数的月份
  3. dd 为日期
  4. HH 为24小时制的小时数
  5. mm 为分钟数
  6. ss 为秒数


具体可以查阅 freemarker 的使用手册


订单相关变量引用


${order.XXXXX}


后台订单详情接口返回的json数据中的 order 对象里的值都可以调用,比如:

${order.qudanhao} 将会打印出取餐号;


${order.orderNumber} 将会打印出订单号;


${order.amountReal} 将会打印出订单实际支付金额;


{
  "amount": 500, // 商品货款金额,不包含运费
  "amountLogistics": 0, // 运费价格
  "amountReal": 500, // 订单实际金额
  "dateAdd": "2020-02-25 11:43:40", // 下单时间
  "goodsNumber": 1, // 商品数量
  "id": 464320, // 订单ID
  "qudanhao": "0006", // 取餐号
  "orderNumber": "20022511439510006", // 订单号
  "isNeedLogistics": true, // 是否需要快递
  "isPay": true, // 是否已支付
  "pingtuanOpenId": false, // 拼团团号
  "isSuccessPingtuan": false, // 是否已成团
  "payNumber": "ZF2002251642338367", // 微信支付订单号
  "remark": "不要麻也不要辣", // 备注
}


订单的商品明细


<#list goods as test>
...  (这里面就可以调用 ${test.XXXX} 来显示商品数据)
</#list>


上面代码遍历打印所有的订单商品,后台订单详情接口返回的json数据中的 goodsList 对象里的值都可以调用


{
  "amount": 500, // 商品总价
  "amountSingle": 500, // 单价
  "goodsName": "WIFI 58mm 热敏打印机工厂定制版", // 商品名称
  "number": 1, // 商品数量
  "pic": "https://cdn.it120.cc/apifactory/2019/03/07/133eb6294e3853ebe4eb8551359a26dc.png", // 商品图片
}


收货地址


${logistics.XXXXXX}


后台订单详情接口返回的json数据中的 apiExtOrderLogistics 对象里的值都可以调用


{
  "address": "详细地址",
  "areaStr": "南岸区",
  "cityId": "500100000000",
  "cityStr": "市辖区",
  "code": "322000", // 邮编
  "districtId": "500108000000",
  "linkMan": "收件人姓名",
  "mobile": "手机号码",
  "provinceId": "500000000000", // 省份编号
  "provinceStr": "重庆市",
  "shipperName": "其他快递公司",
  "trackingNumber": "快递单号",
  "type": 0 // 0 快递,1 达达配送, 2 美团配送, 3 快跑者
}


所属门店数据


${shopInfo.XXXXXX}


如果当前订单有归属门店,那么你就可以调用上面的变量直接打印门店数据;

后台门店详情接口返回的json数据中变量都可以调用


订单扩展属性


${extJson.XXXXXX}


后台订单详情接口返回的json数据中的 extJson 对象里的值都可以调用


标签机商品拆分打印变量


${goodsIndex}

当前打印第几种商品(从 0 开始)


${goodsNumberIndex}

当前打印的某种商品的第几个(最大为用户购买的总数)


${curGoods.XXXXXX}
{
  "amount": 500, // 商品总价
  "amountSingle": 500, // 单价
  "goodsName": "WIFI 58mm 热敏打印机工厂定制版", // 商品名称
  "number": 1, // 商品数量
  "pic": "https://cdn.it120.cc/apifactory/2019/03/07/133eb6294e3853ebe4eb8551359a26dc.png", // 商品图片
}

固定显示文字数量


比如标签机,文字不会自动换行,所以需要可以变量的文字长度,自动进行换行,那么,就需要可以截取显示字数长度进行控制:


比如下面的这句代码,本来是打印商品的规格信息,但是如果规格太长,标签机又不会自动换行,就会无法打印剩下的文字内容:


<TEXT x="10" y="170" font="12">${curGoods.property}</TEXT>


假如一行只能打印 10 个字(只是举例),那么上面的这句语句就可以改成:


<#if curGoods.property?? && curGoods.property?length gt 10>
    <TEXT x="10" y="170" font="12">${curGoods.property?substring(0,10)}</TEXT>
    <TEXT x="10" y="170" font="12">${curGoods.property?substring(10)}</TEXT>
<#else>
    <TEXT x="10" y="170" font="12">${curGoods.property}</TEXT>
</#if>


Copyright © 杭州于芯科技有限公司

浙ICP备15041833号