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();
原文地址:https://www.cnblogs.com/jucheng/p/12342957.html