更新记录

3.2.2(2023-06-02)

  1. 解决了个别情况下打印机打开成功后,接口没有进行响应处理的问题;
  2. 解决了请求成功后,demo中日志显示错误的问题;
  3. demo中增加表格绘制实例代码;
  4. demo中新增设置标签纸类型的代码;
  5. demo中绘制字符串的时候,提供了配置方式设置打印内容的对齐方式以及旋转方向的功能;

3.2.1(2022-12-09)

回退到上一个版本,解决了界面跳转的时候出现的APP闪退的问题。

3.2.0(2022-10-17)

  1. 安卓原生依赖包更新;
  2. 解决了安卓接口中调用openPrinter后没有返回信息的问题;
  3. js接口log以及注释的更新;
查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.0 - 12.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 适用版本区间:9 - 14

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


UniPlugin-LPAPI 插件说明文档

德佟电子

联系方式

  1. 官网:德佟电子科技(上海)有限公司

  2. 电话:021-65111580

  3. 邮箱:support@dothantech.com

  4. 全国服务热线:400-823-6599

使用方式

在需要的地方引入插件配套的 js 接口,根据实际需求,调用对应的接口函数,完成相关操作;

  1. 导入插件; 在插件市场中搜索LPAPI,进入之后,点击右侧的“购买for云打包”,选择目标项目,按照提示操作即可;

  2. 配置插件; 用HBuilderX打开目标项目,选择manifest.json,打开配置视图,在右侧选择“App原生插件配置”,找到“云端插件”,点击“选择云端插件”,勾选目标插件即可;

  3. 配置蓝牙权限; 标签打印机主要是用蓝牙进行数据传输的,所以在使用前需要配置先蓝牙操作权限;

    <uses-permission android:name=\"android.permission.BLUETOOTH\"/>
    <uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/>
    <uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>
    <!-- Android 12新增权限 -->
    <uses-permission android:name=\"android.permission.BLUETOOTH_CONNECT\" />
    <uses-permission android:name=\"android.permission.BLUETOOTH_SCAN\" />
  4. 再页面中导入封装的js接口;

    import api from './lpapi-uniplugin';
  5. 调用接口函数,进行相关打印操作;

    async printQrcode() {
        // 获取打印机列表
        const printerList = await api.getPrinters();
        // 获取打印机列表中的任意一台打印机;
        const printerName = printerList?.name;
        // 连接打印机
        if (printerName) {
            await api.openPrinter(printerName);
        }
        // 开始打印任务
        await api.startJob({
            width: 45,
            height: 45,
            orientation: 0
        });
        // 打印二维码
        await api.draw2DQRCode({
            text: '德佟电子科技有限公司',
            x: 5,
            y: 5,
            width: 35
        });
        // 提交打印任务,开始打印
        await api.commitJob();
        // 再不需要继续打印的话可以关闭打印机,也可以关闭打印机;
        await api.closePrinter();
    }
  6. 编译自定义基座; 调试模式下需要编译一个自定义基座才可以使用,打印机插件是原生插件,标准的基座是不加载原生插件的,所以要进行测试必须编译一个自定义基座才可以操作打印机; 自定义基座编译方法: 打开HBuilderX,选择菜单:运行-->运行到手机或模拟器-->制作自定义调试基座,根据实际情况选择相关选项,然后点击“打包”即可;

接口函数介绍

public interface LPAPI {
    /**
     * 获取指定型号的所有打印机;
     * @param { string | {name?: string} } data 参数;
     * @returns { {name: string}[] } 返回打印机信息列表;
     */
    getPrinters(data);
    /**
     * 获取指定型号的一台打印机;
     * @param { string | {name?: string} } data 参数;
     * @returns { {name: string} } 返回检测到的第一台打印机;
     */
    getFirstPrinter(data);
    /**
     *
     * @param { string | {name?: string}} data 参数;
     */
    openPrinter(data);
    /**
     * 获取当前已连接打印机名称;
     */
    getPrinterName();
    /**
     * 获取当前已连接打印机信息;
     * 调用该接口前要确保打印机已连接;
     */
    getPrinterInfo();
    /**
     * 当前打印机是否已经打开;
     */
    isPrinterOpened();
    /**
     * 关闭打印机;
     */
    closePrinter();
    /**
     * 打印BASE64图片;
     * @param { {
     *      image: string,
     *      PRINT_DENSITY?: number,
     *      PRINT_SPEED?: number,
     *      PRINT_COPIES?: number
     * } } data
     */
    printImage(data);
    /**
     * 开始打印任务;
     * @param { {
     *      width: number,
     *      height: number,
     *      orientation?: number
     * } } data 参数;
     */
    startJob(data);
    /**
     * 提交打印任务;
     * @param {{
     *      GAP_TYPE: number,           // 纸张类型,0:连续纸,1:定位孔,2:间隙纸,3,黑标纸,其他值无效
     *      PRINT_DARKNESS: number,     // 打印浓度,值:0 - 14 之间;
     *      PRINT_SPEED: number,        // 打印速度,值:0 - 4 之间;
     * }} data 参数;
     */
    commitJob(param);
    printParamName: {
        gapType: "GAP_TYPE",
        printDarkness: "PRINT_DARKNESS",
        printSpeed: "PRINT_SPEED",
    },
    printParamValue: {
        gapType: {
            /** 纸张类型:连续纸,value: 0 */
            none: 0,
            /** 纸张类型:定位孔,value: 1 */
            hole: 1,
            /** 纸张类型:间隙纸,value: 2 */
            gap: 2,
            /** 纸张类型:黑标纸,value: 3 */
            black: 3,
        },
        printDarkness: {
            /** 打印浓度:最低 */
            min: 0,
            /** 打印浓度:正常 */
            normal: 5,
            /** 打印浓度:最大 */
            max: 14,
        },
        printSpeed: {
            /** 打印速度:最慢 */
            min: 0,
            /** 打印熟读:正常 */
            normal: 2,
            /** 打印速度:最快 */
            max: 4,
        },
    },
    /**
     * 结束打印任务;
     */
    endJob();
    /**
     * 获取当前的打印任务;
     */
    getJobPages();
    //
    /**
     * 设置后续绘制参数,譬如字体名称,二维码纠错级别等等;
     * @param { {
     *      name: string,
     *      value: *
     * } } data 参数
     */
    setDrawParam(data);
    /**
     * 设置后续内容的旋转方向;
     * @param { number | { orientation: [0, 90, 180, 270]}} data 参数;
     */
    setItemOrientation(data);
    /**
     * 设置水平对齐方式;
     * @param { number | { alignment: [0, 1, 2]}} data 参数;
     */
    setItemHorizontalAlignment(data);
    /**
     * 设置垂直对齐方式;
     * @param { number | { alignment: [0, 1, 2]}} data 参数;
     */
    setItemVerticalAlignment(data);

    // ***************************************************
    // * 打印相关图形对象。
    // ***************************************************

    /**
     * 绘制字符串;
     *
     * @param {{}} data                         字符串绘制参数;
     * @param {string} data.text                待打印的字符串名称;
     * @param {number} data.x                   字符串显示的X轴坐标位置(单位毫米);
     * @param {number} data.y                   字符串显示的Y轴坐标位置(单位毫米);
     * @param {number} data.width               字符串显示区域宽度(单位毫米);
     * @param {number} data.height              字符串显示区域高度(单位毫米);
     * @param {number} data.fontHeight          字体大小(单位毫米);
     * @param {number} data.fontStyle           字体样式,默认位0;(0:常规,1:黑体,2:斜体,3:粗斜体)
     * @param {string} data.fontName            字体名称,默认位"黑体";
     * @param {boolean} data.autoReturn         字符串长度超过width之后,是否自动换行?默认位true;
     * @param {0|90|180|270} data.orientation   字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0;
     * @param {0|1|2} data.horizontalAlignment  字符串在指定的宽高范围内的水平对齐方式,默认以setItemHorizontalAlignment为准,未设置则为0,表示居上对齐,值可为:0、1、2,分别表示左、中、右对齐;
     * @param {0|1|2} data.verticalAlignment    字符串在指定的宽高范围内的垂直对齐方式,默认以setItemVerticalAlignment为准,未设置则为0,表示居上对齐,值可为:0、1、2,分别表示上、中、下对齐;
     * 
     */
    drawText(data);
    /**
     * 绘制一维码;
     * @param {{}} data 一维码绘制参数;
     * @param {string} data.text,               一维码内容
     * @param {number} data.x,                  一维码在坐标系X轴上的位置;
     * @param {number} data.y,                  一维码在坐标系中Y轴上的位置;
     * @param {number} data.width,              一维码在坐标系中的宽度;
     * @param {number} data.height,             一维码高度;
     * @param {number} data.textHeight,         一维码下面显示的字符串高度,不需要的话可以设置位0;
     * @param {number} data.type                一维码类型:{@link BarcodeType}
     * @param {0|90|180|270} data.orientation   字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0;
     * @param {0|1|2} data.horizontalAlignment  字符串在指定的宽高范围内的水平对齐方式,默认以setItemHorizontalAlignment为准,未设置则为0,表示居上对齐,值可为:0、1、2,分别表示左、中、右对齐;
     * @param {0|1|2} data.verticalAlignment    字符串在指定的宽高范围内的垂直对齐方式,默认以setItemVerticalAlignment为准,未设置则为0,表示居上对齐,值可为:0、1、2,分别表示上、中、下对齐;
     * 
     * @typedef{{
     *  UPC_A: 20,
     *  UPC_E: 21,
     *  EAN13: 22,
     *  EAN8: 23,
     *  CODE39: 24,
     *  ITF25: 25,
     *  CODABAR: 26,
     *  CODE93: 27,
     *  CODE128: 28,
     *  ISBN: 29,
     *  ECODE39: 30,
     *  AUTO: 60,
     * }} BarcodeType 一维码类型
     */
    draw1DBarcode(data);
    /**
     * 绘制二维码;
     * @param {{}} data
     * @param {string} data.text                二维码内容
     * @param {number} data.x                   X轴坐标位置(单位毫米)
     * @param {number} data.y                   Y轴坐标位置
     * @param {number} data.width               二维码大小(单位毫米)
     * @param {0|1|2|3} data.eccLevel           二维码纠错级别,0|1|2|3分别表示: L(低)|M(中)|Q(强)|H(高),默认为0,表示最低纠错级别
     * @param {0|90|180|270} data.orientation   字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0,表示不进行任何旋转;
     * @param {0|1|2} data.horizontalAlignment  字符串在指定的宽高范围内的水平对齐方式,默认以setItemHorizontalAlignment为准,未设置则为0,表示居上对齐,值可为:0、1、2,分别表示左、中、右对齐;
     * @param {0|1|2} data.verticalAlignment    字符串在指定的宽高范围内的垂直对齐方式,默认以setItemVerticalAlignment为准,未设置则为0,表示居上对齐,值可为:0、1、2,分别表示上、中、下对齐;
     */
    draw2DQRCode(data);
    /**
     * 绘制矩形框;
     * @param {{}} data
     * @param {number} data.x                   X轴坐标位置(单位毫米)
     * @param {number} data.y                   Y轴坐标位置(单位毫米)
     * @param {number} data.width               绘制数据内容的宽度(单位毫米)
     * @param {number} data.height              绘制数据内容的高度(单位毫米)
     * @param {number} data.lineWidth           边框宽度(单位毫米),默认为0.4mm
     * @param {0|90|180|270} data.orientation   字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0,表示不进行任何旋转;
     */
    drawRectangle(data);
    /**
     * 绘制填充矩形;
     * @param {{}} data
     * @param {number} data.x                   X轴坐标位置(单位毫米)
     * @param {number} data.y                   Y轴坐标位置(单位毫米)
     * @param {number} data.width               绘制数据内容的宽度(单位毫米)
     * @param {number} data.height              绘制数据内容的高度(单位毫米)
     * @param {0|90|180|270} data.orientation   字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0,表示不进行任何旋转;
     */
    fillRectangle(data);
    /**
     * 绘制圆角矩形框;
     * @param {{}} data
     * @param {number} data.x                   X轴坐标位置(单位毫米)
     * @param {number} data.y                   Y轴坐标位置(单位毫米)
     * @param {number} data.width               绘制数据内容的宽度(单位毫米)
     * @param {number} data.height              绘制数据内容的高度(单位毫米)
     * @param {number} data.cornerWidth         圆角半径(单位毫米)
     * @param {number} data.cornerHeight        圆角半径(单位毫米)
     * @param {number} data.lineWidth           边框宽度(单位毫米)
     * @param {0|90|180|270} data.orientation   字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0,表示不进行任何旋转;
     */
    drawRoundRectangle(data);
    /**
     * 填充圆角矩形;
     * @param {{}} data
     * @param {number} data.x                   X轴坐标位置(单位毫米)
     * @param {number} data.y                   Y轴坐标位置(单位毫米)
     * @param {number} data.width               绘制数据内容的宽度(单位毫米)
     * @param {number} data.height              绘制数据内容的高度(单位毫米)
     * @param {number} data.cornerWidth         圆角半径(单位毫米)
     * @param {number} data.cornerHeight        圆角半径(单位毫米)
     * @param {0|90|180|270} data.orientation   字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0,表示不进行任何旋转;
     */
    fillRoundRectangle(data);
    /**
     * 绘制椭圆;
     * @param {{}} data
     * @param {number} data.x                   X轴坐标位置(单位毫米)
     * @param {number} data.y                   Y轴坐标位置(单位毫米)
     * @param {number} data.width               绘制数据内容的宽度(单位毫米)
     * @param {number} data.height              绘制数据内容的高度(单位毫米)
     * @param {number} data.lineWidth           边框宽度(单位毫米)
     * @param {0|90|180|270} data.orientation   字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0,表示不进行任何旋转;
     */
    drawEllipse(data);
    /**
     * 填充椭圆;
     * @param {{}} data
     * @param {number} data.x                   X轴坐标位置(单位毫米)
     * @param {number} data.y                   Y轴坐标位置(单位毫米)
     * @param {number} data.width               绘制数据内容的宽度(单位毫米)
     * @param {number} data.height              绘制数据内容的高度(单位毫米)
     * @param {0|90|180|270} data.orientation   字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0,表示不进行任何旋转;
     */
    fillEllipse(data);
    /**
     * 绘制圆形;
     * @param {{}} data
     * @param {number} data.x               圆心X轴坐标位置(单位毫米)
     * @param {number} data.y               圆心Y轴坐标位置(单位毫米)
     * @param {number} data.radius          圆半径(单位毫米)
     * @param {number} data.lineWidth       边框宽度(单位毫米)
     */
    drawCircle(data);
    /**
     * 填充圆;
     * @param {{}} data
     * @param {number} data.x               圆心X轴坐标位置(单位毫米)
     * @param {number} data.y               圆心Y轴坐标位置(单位毫米)
     * @param {number} data.radius          圆半径(单位毫米)
     */
    fillCircle(data);
    /**
     * 绘制直线;
     * @param {{}} data
     * @param {number} data.x1                  起点X轴坐标位置(单位毫米)
     * @param {number} data.y1                  起点Y轴坐标位置(单位毫米)
     * @param {number} data.x2                  终点X轴坐标位置(单位毫米)
     * @param {number} data.y2                  终点Y轴坐标位置(单位毫米)
     * @param {number} data.lineWidth           线条宽度(单位毫米)
     * @param {0|90|180|270} data.orientation   字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0,表示不进行任何旋转;
     */
    drawLine(data);
    /**
     * 绘制虚线;
     * @param {{}} data
     * @param {number} data.x1                  起点X轴坐标位置(单位毫米)
     * @param {number} data.y1                  起点Y轴坐标位置(单位毫米)
     * @param {number} data.x2                  终点X轴坐标位置(单位毫米)
     * @param {number} data.y2                  终点Y轴坐标位置(单位毫米)
     * @param {number} data.dashLen[],          电话线线段长度数组(单位毫米)
     * @param {number} data.lineWidth           线条宽度(单位毫米)
     * @param {0|90|180|270} data.orientation   字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0,表示不进行任何旋转;
     */
    drawDashLine(data);
    /**
     * 绘制图片;
     * @param {{}} data
     * @param {string} data.image
     * @param {number} data.x                   X轴坐标位置(单位毫米)
     * @param {number} data.y                   Y轴坐标位置(单位毫米)
     * @param {number} data.width               绘制数据内容的宽度(单位毫米)
     * @param {number} data.height              绘制数据内容的高度(单位毫米)
     * @param {number} data.threshold           黑白转换阈值,默认是192
     * @param {0|90|180|270} data.orientation   字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0,表示不进行任何旋转;
     */
    drawImage(data);

隐私、权限声明

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

<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />

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

接口通过蓝牙连接打印机,进行打印相关操作

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

许可协议

The MIT License (MIT)

Copyright (c) 2015 Loopline Systems

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问