uni-app实现商米硬件打印
<div><div>
<div>本文档用到的设备型号:商米(sunmi)V2,2G+16G。</div>
<p>需要引用商米打印插件(每个APP项目需要花费1元购买该插件),插件地址:<span style="text-decoration: underline">ext.dcloud.net.cn/plugin?id=8…</span>。</p>
<p> </p>
<p> </p>
<div>文档上基本打印指令的参考案例,针对于打印图片该文档并没有提供方法直接使用,要通过ESC指令内容来执行打印,参考方法sunmi_print.printRawData(data)。其中,data为图片转化成的ESC指令,此处在服务器端进行转换(用户端的转换效率太低)。</div>
<p>ESCPOS指令文档参考商米的官方文档:docs.sunmi.com/general-fun…</p>
<p> </p>
<p> </p>
<p> </p>
<pre class="hljs bash"><code class="hljs bash copyable" lang="bash">/*
* @param <span class="hljs-variable">$file_path 本地图片路径,图片进行大小整合thumb(400,210)长为400宽为210以符合打印要求
* @<span class="hljs-built_in">return <span class="hljs-variable">$data 打印插件直接使用的数据
*/
public <span class="hljs-keyword">function imageFileToEsc(<span class="hljs-variable">$file_path)
{
<span class="hljs-variable">$image = Image::open(<span class="hljs-variable">$file_path);
<span class="hljs-variable">$image->thumb(400, 210)->save(<span class="hljs-variable">$file_path);
//规范化图片
<span class="hljs-variable">$i = imagecreatefrompng(<span class="hljs-variable">$file_path);
<span class="hljs-variable">$width = ceil(imagesx(<span class="hljs-variable">$i) / 8) * 8 - 8;
<span class="hljs-variable">$height = imagesy(<span class="hljs-variable">$i);
<span class="hljs-variable">$data = [];
<span class="hljs-variable">$data = 0x1D;
<span class="hljs-variable">$data = 0x76;
<span class="hljs-variable">$data = 0x30;
<span class="hljs-variable">$data = 0;
<span class="hljs-variable">$data = <span class="hljs-variable">$width / 8 % 256;
<span class="hljs-variable">$data = (int)(<span class="hljs-variable">$width / 8 / 256);
<span class="hljs-variable">$data = <span class="hljs-variable">$height % 256;
<span class="hljs-variable">$data = (int)(<span class="hljs-variable">$height / 256);
<span class="hljs-variable">$index = 8;
<span class="hljs-keyword">for (<span class="hljs-variable">$y = 0; <span class="hljs-variable">$y < <span class="hljs-variable">$height; <span class="hljs-variable">$y++) {
<span class="hljs-keyword">for (<span class="hljs-variable">$x = 0; <span class="hljs-variable">$x < <span class="hljs-variable">$width; <span class="hljs-variable">$x += 8) {
<span class="hljs-variable">$part = [];
<span class="hljs-keyword">for (<span class="hljs-variable">$j = 0; <span class="hljs-variable">$j < 8; <span class="hljs-variable">$j++) {
<span class="hljs-variable">$read_width = <span class="hljs-variable">$x + <span class="hljs-variable">$j >= <span class="hljs-variable">$width ? <span class="hljs-variable">$width : <span class="hljs-variable">$x + <span class="hljs-variable">$j;
<span class="hljs-variable">$rgb = imagecolorat(<span class="hljs-variable">$i, <span class="hljs-variable">$read_width, <span class="hljs-variable">$y);
<span class="hljs-variable">$r = (<span class="hljs-variable">$rgb >> 16) & 0xFF;
<span class="hljs-variable">$g = (<span class="hljs-variable">$rgb >> 8) & 0xFF;
<span class="hljs-variable">$b = <span class="hljs-variable">$rgb & 0xFF;
<span class="hljs-variable">$gray = (int)(<span class="hljs-variable">$r * 0.3 + <span class="hljs-variable">$g * 0.59 + <span class="hljs-variable">$b * 0.11);
<span class="hljs-keyword">if (<span class="hljs-variable">$gray > 127) {
<span class="hljs-variable">$part[] = 0;
} <span class="hljs-keyword">else {
<span class="hljs-variable">$part[] = 1;
}
}
<span class="hljs-variable">$temp = <span class="hljs-variable">$part * 128 +
<span class="hljs-variable">$part * 64 +
<span class="hljs-variable">$part * 32 +
<span class="hljs-variable">$part * 16 +
<span class="hljs-variable">$part * 8 +
<span class="hljs-variable">$part * 4 +
<span class="hljs-variable">$part * 2 +
<span class="hljs-variable">$part * 1;
<span class="hljs-variable">$data[<span class="hljs-variable">$index++] = <span class="hljs-variable">$temp;
}
}
<span class="hljs-built_in">return <span class="hljs-variable">$data;
}<span class="copy-code-btn">复制代码</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<pre class="hljs bash"><code class="hljs bash copyable" lang="bash">//引用插件
const sunmi_print= uni.requireNativePlugin(<span class="hljs-string">'Sunmi-Print');
//连接打印机
//首次启动app时调用此方法,使app可以连上打印机,从而可以操作打印
sunmi_print.init();
//打印图片
sunmi_print.printRawData(data);
//断开打印机
sunmi_print.destroy();</span></code></pre>
</div>
</div><br><br>
来源:https://www.cnblogs.com/jucheng/p/12342957.html
頁:
[1]