更新记录

1.0.20260424(2026-04-23)

  1. 更新README

1.0.20260423(2026-04-23)

  1. 支持打印热敏小票

3.0.20250402(2025-04-02)

更新README

查看更多

平台兼容性

uni-app(5.0)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- × × × 5.0 × ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

uni-app x(5.0)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - - - - -

插件文档

引入插件

  • 点击插件试用引入到项目
  • 打包自定义基座包
  • 按照下方示例测试
  • 先插件试用,完全符合需求后购买
  • 目前已测试设备 sunmi V2/sunmi V2S

插件方法

方法 描述
testLabelPrinter(width,height) 打印标签小票最简示例
labelPrinter(jsonData,success【成功】,fail【失败】) 打印标签小票方法
testThermalPrinter(width,height) 打印热敏小票最简示例
thermalPrinter(jsonData,success【成功】,fail【失败】) 打印热敏小票方法

标签小票打印说明

labelPrinter 支持以下能力:

  1. 文本
  2. 条码
  3. 二维码
  4. 图片
  5. 图形

labelPrinter 参数1:jsonData 参数描述

export type LabelPrinterParamOption = {
    rect : LabelPrinterItemOption,
    items : LabelPrinterItemOption[],
    count : number
}

LabelPrinterItemOption 参数描述

参数名 类型 描述
type string text 文本 / barcode 条码 / qr 二维码 / image 图片 / area 图形
text string 文本内容;text/barcode/qr 场景常用
setWidth number 宽度
setHeight number 高度
setPosX number X 坐标
setPosY number Y 坐标
setAlign string 对齐方式:DEFAULT/LEFT/CENTER/RIGHT
setRotate string 旋转:ROTATE_0/ROTATE_90/ROTATE_180/ROTATE_270
setStyle string 图形样式(area):RECT/CIRCLE/OVAL/PATH
setEndX number 图形终点 X(area
setEndY number 图形终点 Y(area
setThick number 图形线条粗细(area
base64Image string base64 图片数据(image 必填)
setAlgorithm string 图片算法(image):BINARIZATION/DITHERING
setValue number 图片算法阈值(image + BINARIZATION 可用)
setDotWidth number 条码线宽(barcode
setBarHeight number 条码高度(barcode
setReadable string 条码可读文本位置:POS_NONE/POS_ONE/POS_TWO/POS_BOTH
setSymbology string 条码类型:UPC_A/UPC_E/JAN13/JAN8/CODE39/ITF/CODABAR/CODE93/CODE128
setDot number 二维码点大小(qr
setErrorLevel string 二维码纠错级别(qr):L/M/Q/H
setFont string 字体(text
setTextSize number 字体大小(text
setTextWidthRatio number 字宽比例(text
setTextHeightRatio number 字高比例(text
setTextSpace number 字间距(text
enableBold boolean 粗体(text
enableUnderline boolean 下划线(text
enableStrikethrough boolean 删除线(text
enableItalics boolean 斜体(text

热敏小票打印说明

thermalPrinter 支持以下能力:

  1. 文本
  2. 按列打印
  3. 条形码
  4. 二维码
  5. 图片
  6. 分割线

thermalPrinter 参数1:jsonData 参数描述

export type ThermalPrinterParamOption = {
    rect : ThermalPrinterItemOption,
    items : ThermalPrinterItemOption[]
}

ThermalPrinterItemOption 参数描述

参数名 类型 描述
type string text 文本 / columns 按列打印 / barcode 条码 / qr 二维码 / image 图片 / line 分割线
text string 文本内容;text/barcode/qr/line 场景常用
setWidth number 宽度
setHeight number 高度
setPosX number X 坐标
setPosY number Y 坐标
setAlign string 对齐方式:DEFAULT/LEFT/CENTER/RIGHT
setRotate string 旋转:ROTATE_0/ROTATE_90/ROTATE_180/ROTATE_270
columnsText string[] 按列打印的列文本(columns
columnsWidth string[] 按列打印列宽(columns,内部会转为数字)
columnsAlign string[] 按列对齐(columns):0 左 / 1 中 / 2
base64Image string base64 图片数据(image 必填)
setAlgorithm string 图片算法(image):BINARIZATION/DITHERING
setValue number 图片算法阈值(image + BINARIZATION 可用)
setDotWidth number 条码线宽(barcode
setBarHeight number 条码高度(barcode
setReadable string 条码可读文本位置:POS_NONE/POS_ONE/POS_TWO/POS_BOTH
setSymbology string 条码类型:UPC_A/UPC_E/JAN13/JAN8/CODE39/ITF/CODABAR/CODE93/CODE128
setDot number 二维码点大小(qr
setErrorLevel string 二维码纠错级别(qr):L/M/Q/H
setFont string 字体(text
setTextSize number 字体大小(text
setTextWidthRatio number 字宽比例(text
setTextHeightRatio number 字高比例(text
setTextSpace number 字间距(text
enableBold boolean 粗体(text
enableUnderline boolean 下划线(text
enableStrikethrough boolean 删除线(text
enableItalics boolean 斜体(text
lineType string 分割线类型(line):EMPTY 空白 / DOTTED 虚线 / SOLID 实线
lineOffset number 分割线高度(line

参考链接

  1. 标签小票文档
  2. 热敏小票文档

引入插件

import * as sunmi from '@/uni_modules/cms-sunmi';

uniapp 完整示例代码

<template>
    <view >
        <button @click="testLabelPrinter" type="primary">标签打印(最简)</button>
        <button @click="labelPrinter" type="primary">标签打印(全功能)</button>
        <button @click="labelPrinterImage" type="primary">标签打印图片</button>

        <button @click="testThermalPrinter" type="primary">热敏打印(最简)</button>
        <button @click="thermalPrinterDemoByDoc" type="primary">热敏打印(全功能)</button>
    </view>
</template>

<script setup>
    import * as sunmi from '@/uni_modules/cms-sunmi';

    function testThermalPrinter(){
        sunmi.testThermalPrinter(400, 240);
    }

    function thermalPrinterDemoByDoc(){
        sunmi.thermalPrinter(JSON.stringify({
            rect: {
                setWidth: 400,
                setHeight: 240
            },
            items: [
                {
                    type: 'line',
                    lineType: "DOTTED",
                    lineOffset: 30
                },
                {
                    type: 'text',
                    text: '商米热敏小票 Demo',
                    setAlign: 'CENTER',
                    setTextSize: 32,
                    enableBold: true,
                },
                {
                    type: 'line',
                    lineType: "EMPTY",
                    lineOffset: 30
                },
                {
                    type: 'columns',
                    columnsText: ['商品', '数量', '金额'],
                    columnsWidth: ['16', '6', '10'],
                    columnsAlign: ['0', '1', '2'],
                },
                {
                    type: 'columns',
                    columnsText: ['门禁卡', '2', '31.80'],
                    columnsWidth: [16, 6, 10],
                    columnsAlign: [0, 1, 2],
                },
                {
                    type: 'line',
                    lineType: "SOLID",
                    lineOffset: 30
                },
                {
                    type: 'barcode',
                    text: '250015001590010005',
                    setSymbology: 'CODE128',
                    setReadable: 'POS_TWO',
                    setBarHeight: 80,
                    setDotWidth: 2,
                    setAlign: 'CENTER',
                },
                {
                    type: 'qr',
                    text: 'https://www.sunmi.com',
                    setDot: 8,
                    setErrorLevel: 'M',
                }
            ]
        }),(res)=>{
            // 此处是成功回调
            console.log(res)
        },(err)=>{
            // 此处是失败回调
            console.error(err)
        })
    }

    function testLabelPrinter() {
        sunmi.testLabelPrinter(400, 240);
    }

    function labelPrinterImage() {
        sunmi.labelPrinter(JSON.stringify({
            "items": [{
                "type": "image",
                "setPosX": 0,
                "setPosY": 0,
                "setWidth": 200,
                "setHeight": 200,
                "base64Image": `data:image/png;base64,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`
            }],
            "rect": {
                "setWidth": 400,
                "setHeight": 240
            },
            "count": 1
        }), res => {
            console.log('success:', res);
        }, err => {
            console.log('fail:', err);
        })
    }

    function labelPrinter() {
        sunmi.labelPrinter(JSON.stringify({
            "items": [{
                    "setText": "品名:门禁卡",
                    "setPosX": 0,
                    "setPosY": 0,
                    "setTextSize": 30,
                    "setTextWidthRatio": 0,
                    "setTextHeightRatio": 0,
                    "setWidth": 208,
                    "setAlign": "LEFT",
                    "setRotate": "ROTATE_0",
                    "setTextSpace": 0,
                    "enableUnderline": false,
                    "enableStrikethrough": false,
                    "enableItalics": false,
                    "enableBold": false,
                    "type": "text",
                    "text": "品名:门禁卡"
                },
                {
                    "setText": "15.90元/500g",
                    "setPosX": 17,
                    "setPosY": 45,
                    "setTextSize": 24,
                    "setTextWidthRatio": 0,
                    "setTextHeightRatio": 0,
                    "setWidth": 152,
                    "setAlign": "LEFT",
                    "setRotate": "ROTATE_180",
                    "setTextSpace": 0,
                    "enableUnderline": true,
                    "enableStrikethrough": false,
                    "enableItalics": false,
                    "enableBold": false,
                    "type": "text",
                    "text": "15.90元/500g"
                },
                {
                    "setText": "5.3折",
                    "setPosX": 316,
                    "setPosY": 8,
                    "setTextSize": 24,
                    "setTextWidthRatio": 0,
                    "setTextHeightRatio": 0,
                    "setWidth": 96,
                    "setAlign": "LEFT",
                    "setRotate": "ROTATE_270",
                    "setTextSpace": 0,
                    "enableUnderline": false,
                    "enableStrikethrough": false,
                    "enableItalics": false,
                    "enableBold": true,
                    "type": "text",
                    "text": "5.3折"
                },
                {
                    "setText": "250015001590010005",
                    "setPosX": 16,
                    "setPosY": 112,
                    "setDotWidth": 1,
                    "setBarHeight": 56,
                    "setReadable": "POS_TWO",
                    "setSymbology": "CODE128",
                    "setAlign": "LEFT",
                    "setRotate": "ROTATE_0",
                    "type": "barcode",
                    "text": "250015001590010005"
                },
                {
                    "setText": "2025-01-03 14:04:51",
                    "setPosX": 136,
                    "setPosY": 208,
                    "setTextSize": 24,
                    "setTextWidthRatio": 0,
                    "setTextHeightRatio": 0,
                    "setWidth": 224,
                    "setAlign": "LEFT",
                    "setRotate": "ROTATE_180",
                    "setTextSpace": 0,
                    "enableUnderline": false,
                    "enableStrikethrough": false,
                    "enableItalics": true,
                    "enableBold": false,
                    "type": "text",
                    "text": "2025-01-03 14:04:51"
                },
                {
                    "setText": "供应商:000035",
                    "setPosX": 20,
                    "setPosY": 84,
                    "setTextSize": 24,
                    "setTextWidthRatio": 0,
                    "setTextHeightRatio": 0,
                    "setWidth": 208,
                    "setAlign": "LEFT",
                    "setRotate": "ROTATE_0",
                    "setTextSpace": 0,
                    "enableUnderline": false,
                    "enableStrikethrough": false,
                    "enableItalics": false,
                    "enableBold": false,
                    "type": "text",
                    "text": "供应商:000035"
                },
                {
                    "setText": "00150",
                    "setPosX": 248,
                    "setPosY": 9,
                    "setTextSize": 30,
                    "setTextWidthRatio": 0,
                    "setTextHeightRatio": 0,
                    "setWidth": 99,
                    "setAlign": "LEFT",
                    "setRotate": "ROTATE_90",
                    "setTextSpace": 0,
                    "enableUnderline": false,
                    "enableStrikethrough": false,
                    "enableItalics": false,
                    "enableBold": false,
                    "type": "text",
                    "text": "00150"
                },
            ],
            "rect": {
                "setWidth": 400,
                "setHeight": 240
            },
            "count": 1
        }), res => {
            console.log('success:', res);
        }, err => {
            console.log('fail:', err);
        })
    }

</script>

需要帮助?有其他插件的需求?联系我!

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: