打印模板

模板是指依据(菜鸟打印标记语言规范)设计出来的模板。为了更加快速的进行模板设计与生成,可采用菜鸟官方提供的模板编辑器(菜鸟模板编辑器)。

模板内容

模板内容分为两种:静态内容和动态内容。

  • 静态内容:在模板绘制的过程中,值就确定的内容我们称之为静态内容。在编辑器中进行模板设计的时候就可以将内容输入进去。
  • 动态内容:在绘制模板的过程中,我们经常希望只放入一个占位符,其内容将在实际打印时才能确定,我们称之为动态内容。为了支持这种动态内容, 在模板中可以通过编写ECMAScript(参考链接)脚本来达到生成动态内容的目的。同时对 ECMAScript 的解析采用了 目前业界最先进的V8引擎,具有极高的性能,在打印服务生成打印文件前,会对ECMAScript的代码进行解析并替换为实际值。

动态内容的编写

动态内容可以嵌入类似js的代码,在模板中可以通过如下的方式嵌入动态代码:

  • 动态语句: 以”<%”开始,以”%>”结束,如<% if(true) %>。
  • 变量引用: 以”<%=”开始,以”%>”结束,如”<%=data.address%>”,表示将会用data.address的实际值在模板中进行填充。允许使用自定义的变量。可参考:(链接)。
  • 如果内容中要输出”<%”或者”<%=”,需要添加”“做转义,也即”<%”。
  • 内置变量:_data为内置变量,表示打印数据的内容,即打印接口中的content数据

动态代码示例如下,这个例子是将获得的打印数据(data)中的所有对象依次输出。

<layout left="6" top="5" width="20" height="20" style="borderStyle:solid;">
    <text width="" value="动态数据显示" />
        <% for(i=0;i++;i<_data.arrayObject.lenth) {%>
            <text width="" value="<%=_data.arrayObject[i].value%>" style="fontSize:12"/>
        <%}%>
</layout>

数据:

[
    ["收件人"],
    ["发件人"],
    [ "收货地址"]
]

动态代码解析之后的静态代码为:

<layout left="6" top="5" width="20" height="20" style="borderStyle:solid;">
    <text width="" value="动态数据显示" />
    <text width="" value="收件人" style="fontSize:12"/>
    <text width="" value="发件人" style="fontSize:12"/>
    <text width="" value="收货地址" style="fontSize:12"/>
</layout>

注解

_开头的变量名都保留给系统使用,请不要在模板中定义_开头的变量名字。

标记语言规范

打印机支持的单位有:px, mm,如无特殊说明,默认单位都为mm,(200dpi的打印机1mm = 8 px),坐标系以左上角为起点(0,0), page 为根节点.

标签说明

page 根节点

属性 类型 说明
width dimension 打印区域宽度
height dimension 打印区域高度
gap dimension 纸张间隙(标签纸、面单纸需要设置)
offset dimension 打印完后走纸距离
tear boolean 撕纸模式
shift-x dimension x轴偏移量
shift-y dimension y轴偏移量

layout 布局节点

属性 类型 说明
width dimension 宽度
height dimension 高度
left dimension 与上一节点x轴相对位置
top dimension 与上一节点y轴相对位置

line 直线

属性 类型 说明
startX dimension 起点
startY dimension 起点
endX dimension 终点
endY dimension 终点

模板示例

示例模板

<?xml version="1.0" encoding="UTF-8"?>
<% var contentHeight = _data.record_detail.length*5 %>

<page xmlns="http://template.sonma.net/schema" height="<%=190+contentHeight%>" width="100">
    <image x="37.5" y="8" src="logo.BMP" />
    <text  x="0" y="35" width="100" height="5" font-size="12" align="center" font-name="simhei.TTF">欢迎光临 <%=_data.brand_name%></text>
    <bar x="3" y="44" width="94" height="1"/>
    <text x="3" y="48" width="100" height="4" font-size="10" font-name="simsun.TTF" align="left">柜    台:<%=_data.brand_name%></text>
    <text x="3" y="54" width="100" height="4" font-size="10" font-name="simsun.TTF" align="left">销售单号:<%=_data.record_code%></text>
    <text x="3" y="59" width="100" height="4" font-size="10" font-name="simsun.TTF" align="left">打印时间:<%=_context.formatStartTime('yyyy-MM-dd HH:mm:ss')%></text>
    <text x="3" y="64" width="100" height="4" font-size="10" font-name="simsun.TTF" align="left">联系电话:<%=_data.shop_tel%></text>
    <text x="3" y="69" width="100" height="4" font-size="10" font-name="simsun.TTF" align="left">销售日期:<%=_data.record_time%></text>
    <text x="3" y="74" width="100" height="4" font-size="10" font-name="simsun.TTF" align="left">收 银 员:<%=_data.user_name%></text>
    <line x="3" y="80" endx="97" endy="80"/>
    <text x="3" y="83" width="37.5" height="4" align="center" debug="false" font-name="simsun.TTF">商品</text>
    <text x="37.5" y="83" width="14.125" height="4" align="center" debug="false" font-name="simsun.TTF">规格</text>
    <text x="51.625" y="83" width="14.125" height="4" align="center" debug="false" font-name="simsun.TTF">数量</text>
    <text x="65.75" y="83" width="14.125" height="4" align="center" debug="false" font-name="simsun.TTF">单价</text>
    <text x="79.875" y="83" width="14.125" height="4" align="center" debug="false" font-name="simsun.TTF">金额</text>
    <% var y = 89 %>
    <% for(var i=0; i < _data.record_detail.length; i++)  {%>
    <text x="3" y="<%=y%>" width="37.5" height="4" align="left" debug="false" font-name="simsun.TTF"><%=_data.record_detail[i].goods_name  || "" %></text>
    <text x="37.5" y="<%=y%>" width="14.125" height="4" align="center" debug="false" font-name="simsun.TTF"><%=_data.record_detail[i].ggmc || "" %></text>
    <text x="51.625" y="<%=y%>" width="14.125" height="4" align="center" debug="false" font-name="simsun.TTF"><%=_data.record_detail[i].num || "" %></text>
    <text x="65.75" y="<%=y%>" width="14.125" height="4" align="center" debug="false" font-name="simsun.TTF"><%=_data.record_detail[i].price  || "" %></text>
    <text x="79.875" y="<%=y%>" width="14.125" height="4" align="center" debug="false" font-name="simsun.TTF"><%=_data.record_detail[i].money || "" %></text>
    <% y += 5 %>
    <%}%>


    <text x="3" y="<%=y%>" width="37.5" height="4" align="left" debug="false" font-name="simsun.TTF">合计:<%=_data.record_detail.length%></text>
    <text x="37.5" y="<%=y%>" width="14.125" height="4" align="center" debug="false" font-name="simsun.TTF"><%=_data.total_num%></text>
    <text x="79.875" y="<%=y%>" width="14.125" height="4" align="center" debug="false" font-name="simsun.TTF"><%=_data.total_money%></text>
    <%y+=10%>

    <line x="3" y="<%=y%>" endx="97" endy="<%=y%>"/>
    <%y+=5%>


    <text x="3" y="<%=y%>" width="20" height="4" font-name="simsun.TTF">收银方式</text>
    <%y+=5%>

    <text x="3" y="<%=y%>" width="100" height="5" font-size="12" font-name="simhei.TTF">实收:<%=_data.pay_money%>  找零:<%=_data.zlje | {}%></text>
    <%y+=9%>
    <line x="3" y="<%=y%>" endx="97" endy="<%=y%>"/>
    <%y+=2%>
    <qrcode x="74" y="<%=y%>" width="20" height="20" align="right" debug="false">http://mp.weixin.com/r/TEg0LHfEvSrCrTNP9x1e</qrcode>
    <text x="3" y="<%=y%>" width="100" height="4" font-name="simsun.TTF">会员卡号:<%=_data.vip_code%></text>
    <%y+=5%>
    <text x="3" y="<%=y%>" width="100" height="4" font-name="simsun.TTF">本单积分:<%=_data.integral || 0%></text>
    <%y+=5%>
    <text x="3" y="<%=y%>" width="100" height="4" font-name="simsun.TTF">会员积分:<%=_data.integral || 0%></text>
    <%y+=8%>

    <bar x="3" y="<%=y%>" width="94" height="1"/>
    <%y+=4%>
    <text x="3" y="<%=y%>" width="20" height="4" font-name="simhei.TTF">退换政策</text>
    <%y+=6%>
    <text x="5" y="<%=y%>" width="90" height="50" font-name="simsun.TTF" space="1" font-size="9">1.退换商品必须出示原始收银条,银行卡退款时须多加出示原始签购单及银行卡。
2.商品在未经穿着、洗涤、损坏并保留吊牌和洗唛的前提下。在购买后1个月内可退换。
3.非顾客原因造成质量问题的商品,3个月内可无条件退换。
4.由于顾客自身原因而造成质量问题或已穿着、洗涤、损坏、修改(如长裤、皮带)的商品及贴身商品恕不退还。
5.银行卡退款将在30至45个工作日退回原卡。根据银行规定银行卡不可退现金。谢谢惠顾!</text>



</page>

80mm打印机模板说明

标签说明

功能 标签格式 说明
加粗 <B>..</B>  
居中 <C>..</C>  
加宽 <W>..</W>  
加高 <L>..</L>  
居中加粗 <CB>..</CB>  
加粗大字 <DB>..</DB>  
居中加粗大字 <CDB>..</CDB>  
换行 ..<BR>  
切纸 <CUT>  

动态模板

模板

<CB><%=shopName%></CB><BR>
<C><%=shopAddress%></C><BR>
单号:<%=:orderNumber | left_align:18%> 时间:<%=date%><BR>
客户:<%=:customerName | left_align:18 %> 员工:<%=staffName%><BR>
------------------------------------------------<BR>
<%=:'货号' | left_align:9 %><%=:'名称' | left_align:9 %><%=:'数量' | left_align:10 %><%=:'单价' | left_align:10 %><%=:'小计' | right_align:10 %><BR>
------------------------------------------------<BR>
<% for(var item in order)
    {%><%=:order[item].ref | left_align:9 %><%=:order[item].name | left_align:9 %><%=:order[item].num | left_align:10 %><%=:order[item].price | left_align:10 %><%=:order[item].total | right_align:10 %><BR><%}
%>
------------------------------------------------<BR>
数量:                                       2<BR>
总计:                                       1000<BR>
------------------------------------------------<BR>
<B>微信:500</B><BR><B>未付:500</B><BR>
------------------------------------------------<BR>
农行卡:6228 4800 8207 8306 717<BR>
工行卡:6222 0236 0202 3368 921<BR>
户名:杭州胜马科技有限公司<BR>
温馨提示:如发现质量问题,凭此开单票据,本市的三天内,外地七日内调换,若人为损坏,开不退换!<BR>
------------------------------------------------<BR>
单据打印时间:                   2016-07-13 13:34<BR>
------------------------------------------------<BR>
技术支持(全国):0571-85353593           胜马科技<BR><BR>
<C><QRCODE>http://weixin.qq.com/r/Xo7WzpnEacQWrd2t99tM</QRCODE></C><BR><BR>
<CUT>