一、前言(整個流程除了調整列印模板位子,操作下來還是挺快的 幾分鐘就搞定,文章圖片比較多大家可能感覺操作比較麻煩,其實挺簡單的) 因甲方需求,需要對現項目進行升級,需要增加移動手持終端進行巡檢,巡檢時還需要對商品進行抽檢並列印熱敏不幹膠標簽進行貼到抽樣樣品上。在這樣的背景下便在JD進行了採樣,進行技 ...
一、前言(整個流程除了調整列印模板位子,操作下來還是挺快的 幾分鐘就搞定,文章圖片比較多大家可能感覺操作比較麻煩,其實挺簡單的)
因甲方需求,需要對現項目進行升級,需要增加移動手持終端進行巡檢,巡檢時還需要對商品進行抽檢並列印熱敏不幹膠標簽進行貼到抽樣樣品上。在這樣的背景下便在JD進行了採樣,進行技術性研究。本文章將一步一步教大家如何使用.NET MAUI 來集成java printerx 來實現使用MAUI 在移動終端上進行標簽列印。 下方是採購的移動終端設備。
二、下載AAR 開發SDK
通過官方文檔我們得知 設備的列印SDK包是 printerx,開發包是JAVA開發的,這種情況如何使用MAUI進行對接呢?這難不倒我們,我們今天就用.NET MAUI 來進行集成 printerx
1、打開https://mvnrepository.com 網站,搜索 printerx
https://mvnrepository.com/search?q=printerx
2、點擊 printerx 進去後,我們選擇最新版 “1.0.14”
3、然後點擊 View All ,將看到如下界面。
4、第一個 printerx-1.0.14.aar 是我們需要下載的文件,點擊將來文件下載到本地桌面。
三、在MAUI中集成AAR SDK
1、是用VS2022 新建MAUI項目(.NET 7),然後添加新項目“Android 綁定庫(Xmarin)”,沒有“Android 綁定庫(Xmarin)”的在installer中選擇安裝 Xmarin。
2、打開“Android 綁定庫(Xmarin)”項目,打開 Jars文件夾,將之前下載的 printerx-1.0.14.aar 拷貝進文件夾內。
3、右擊 printerx-1.0.14.aar 選擇屬性,將生成操作選擇 “LibraryProjectZip”。
4、查看項目屬性,和我的保持一致。
5、將MAUI項目中 安卓端引用 “Android 綁定庫(Xmarin)”項目。
6、應為前幾次測試的時候,WIndows、IOS端有報錯提示不相容發生,我將其他端都刪掉了,只保留了安卓端。
四、調試移動終端
1、為了方便測試 我把代碼寫到了"MainPage.xaml.cs",MAUI自動生成的代碼沒有刪除,也再文件中。以下是完整代碼,應為是技術性測試所以代碼寫的不是很規範,列印標簽的位子也是寫的很隨意,正式放到項目中將優化。
using Android.Icu.Text; using Com.Sunmi.Printerx; using Java.Interop; using Java.Util; namespace MauiApp1 { public partial class MainPage : ContentPage { int count = 0; public MainPage() { InitializeComponent(); } public Com.Sunmi.Printerx.PrinterSdk.Printer Printer; private void OnCounterClicked(object sender, EventArgs e) { var listen = new PrinterListen(); Com.Sunmi.Printerx.PrinterSdk.Instance.GetPrinter( Android.App.Application.Context, listen ); count++; if (count == 1) CounterBtn.Text = $"Clicked {count} time"; else CounterBtn.Text = $"Clicked {count} times"; SemanticScreenReader.Announce(CounterBtn.Text); } public class PrintResult2 : Com.Sunmi.Printerx.Api.PrintResult { public override void OnResult(int p0, string p1) { } } //獲取印表機監 public class PrinterListen : Java.Lang.Object, Com.Sunmi.Printerx.PrinterSdk.IPrinterListen { public Com.Sunmi.Printerx.PrinterSdk.Printer Printer; public void OnDefPrinter(PrinterSdk.Printer p0) { this.Printer = p0;//獲取到印表機 var api = Printer.CanvasApi(); api.InitCanvas(Com.Sunmi.Printerx.Style.BaseStyle.Style.SetWidth(52*8).SetHeight(35*8));//初始化 api.RenderArea(Com.Sunmi.Printerx.Style.AreaStyle.Style.SetWidth(49*8).SetHeight(33*8)//設置列印區域 .SetStyle(Com.Sunmi.Printerx.Enums.Shape.RectWhite) .SetPosX(0).SetPosY(0)); api.RenderText("標題", //列印字元串 Com.Sunmi.Printerx.Style.TextStyle.Style .SetAlign(Com.Sunmi.Printerx.Enums.Align.Center) .SetTextSize(32) .SetPosX(208).SetPosY(16) ); api.RenderText("商品名稱(車牌號)", Com.Sunmi.Printerx.Style.TextStyle.Style .SetAlign(Com.Sunmi.Printerx.Enums.Align.Center) .SetTextSize(30) .SetPosX(208).SetPosY(40 + 10) .EnableBold(true) ); api.RenderBarCode("2311202003400013",//列印條形碼 Com.Sunmi.Printerx.Style.BarcodeStyle.Style .SetAlign(Com.Sunmi.Printerx.Enums.Align.Center) .SetPosX(208).SetPosY(38+12+30) .SetBarHeight(80).SetDotWidth(3) .SetWidth(350) ); api.RenderText("2311202003400013", Com.Sunmi.Printerx.Style.TextStyle.Style .SetAlign(Com.Sunmi.Printerx.Enums.Align.Center) // .SetTextSize(24) .SetPosX(208).SetPosY(38+32+95) ); api.RenderText("商戶姓名:姓名007", Com.Sunmi.Printerx.Style.TextStyle.Style // .SetAlign(Com.Sunmi.Printerx.Enums.Align.Center) // .SetTextSize(20) .EnableBold(true) .SetPosX(30).SetPosY(38 + 32 + 100 +23) ); api.RenderText("抽樣時間:2023-11-02 13:00", Com.Sunmi.Printerx.Style.TextStyle.Style .EnableBold(true) .SetPosX(30).SetPosY(38 + 32 + 100 +25+25) ); var printReuslt = new PrintResult2(); api.PrintCanvas(1, printReuslt); } public void OnPrinters(IList<PrinterSdk.Printer> p0) { this.Printer.Dispose(); } } } }
五、完成對接
通過以上操作便可以列印出標簽了,以下是測試效果。