zoukankan      html  css  js  c++  java
  • uni-app实现商米硬件打印

    本文档用到的设备型号:商米(sunmi)V2,2G+16G。

    需要引用商米打印插件(每个APP项目需要花费1元购买该插件),插件地址:ext.dcloud.net.cn/plugin?id=8…

    文档上基本打印指令的参考案例,针对于打印图片该文档并没有提供方法直接使用,要通过ESC指令内容来执行打印,参考方法sunmi_print.printRawData(data)。其中,data为图片转化成的ESC指令,此处在服务器端进行转换(用户端的转换效率太低)。

    ESCPOS指令文档参考商米的官方文档:docs.sunmi.com/general-fun…

    /*
    * @param $file_path 本地图片路径,图片进行大小整合thumb(400,210)长为400宽为210以符合打印要求
    * @return $data 打印插件直接使用的数据
    */
    public function imageFileToEsc($file_path)
    {
        $image = Image::open($file_path);
        $image->thumb(400, 210)->save($file_path);
        //规范化图片
        $i = imagecreatefrompng($file_path);
        $width = ceil(imagesx($i) / 8) * 8 - 8;
        $height = imagesy($i);
        $data = [];
        $data[0] = 0x1D;
        $data[1] = 0x76;
        $data[2] = 0x30;
        $data[3] = 0;
        $data[4] = $width / 8 % 256;
        $data[5] = (int)($width / 8 / 256);
        $data[6] = $height % 256;
        $data[7] = (int)($height / 256);
        $index = 8;
        for ($y = 0; $y < $height; $y++) {
            for ($x = 0; $x < $width; $x += 8) {
                $part = [];
                for ($j = 0; $j < 8; $j++) {
                    $read_width = $x + $j >= $width ? $width : $x + $j;
                    $rgb = imagecolorat($i, $read_width, $y);
                    $r = ($rgb >> 16) & 0xFF;
                    $g = ($rgb >> 8) & 0xFF;
                    $b = $rgb & 0xFF;
                    $gray = (int)($r * 0.3 + $g * 0.59 + $b * 0.11);
                    if ($gray > 127) {
                        $part[] = 0;
                    } else {
                        $part[] = 1;
                    }
                }
                $temp = $part[0] * 128 +
                    $part[1] * 64 +
                    $part[2] * 32 +
                    $part[3] * 16 +
                    $part[4] * 8 +
                    $part[5] * 4 +
                    $part[6] * 2 +
                    $part[7] * 1;
                $data[$index++] = $temp;
            }
        }
        return $data;
    }复制代码
    //引用插件
    const sunmi_print= uni.requireNativePlugin('Sunmi-Print'); 
    //连接打印机
    //首次启动app时调用此方法,使app可以连上打印机,从而可以操作打印
    sunmi_print.init();
    //打印图片
    sunmi_print.printRawData(data);
    //断开打印机
    sunmi_print.destroy();
  • 相关阅读:
    单片机的状态机框架编写
    lubuntu18.04.4LTS系统安装及esp8266的环境搭建
    tcp网络驱动芯片w5500使用小记
    virtual box平台下如何实现Windows和ubuntu的文件共享——涉及增强工具+挂载技巧
    ubuntu的版本生命周期
    ubuntu18.10 server折腾小记
    iar、keil(ac5+ac6)编译效果小记
    IAR嵌入式工作台IDE _ (__no_init) 绝对定位
    大战Java虚拟机【2】—— GC策略
    大战Java虚拟机【1】—— 内存
  • 原文地址:https://www.cnblogs.com/jucheng/p/12342957.html
Copyright © 2011-2022 走看看