打印蓝牙 Xamarin

Printing Bluetooth Xamarin

我正在用 Xamarin PCL 类型开发一个应用程序...设法搜索打印机,连接打印机,但是当我想打印我的变量时,这些变量没有打印....(但是如果你打印默认带来的凭证)我正在占用 SDK Zebra LinkOS_XamarinSDK,我附上了我的代码....对我有帮助吗?

我的SelectPrinterView.cs

public SelectPrinterView(UsuariosMovil usuarioMovil)
    {

        Title = "Seleccione una Impresora";           

        printerList = new ObservableCollection<IDiscoveredPrinter>();

        printerLv = new ListView
        {
            ItemsSource = printerList,
            ItemTemplate = new DataTemplate(() =>
            {
                printerLbl = new Label { Text = "No hay Impresoras Seleccionadas" };

                Label addressLbl = new Label();
            addressLbl.SetBinding(Label.TextProperty, "Address");

            Label friendlyLbl = new Label();
            friendlyLbl.SetBinding(Label.TextProperty, "FriendlyName");

            return new ViewCell
            {
                View = new StackLayout
                {
                    Orientation = StackOrientation.Horizontal,
                    Children = { addressLbl, friendlyLbl }
                }
            };
        })
    };
    printerLv.ItemSelected += PrinterLv_ItemSelected;

我的打印功能:

 private void sendZplReceipt(IConnection printerConnection)
        {
            String tmpHeader =
                    /*
                     Some basics of ZPL. Find more information here : http://www.zebra.com

                     ^XA indicates the beginning of a label
                     ^PW sets the width of the label (in dots)
                     ^MNN sets the printer in continuous mode (variable length receipts only make sense with variably sized labels)
                     ^LL sets the length of the label (we calculate this value at the end of the routine)
                     ^LH sets the reference axis for printing. 
                        You will notice we change this positioning of the 'Y' axis (length) as we build up the label. Once the positioning is changed, all new fields drawn on the label are rendered as if '0' is the new home position
                     ^FO sets the origin of the field relative to Label Home ^LH
                     ^A sets font information 
                     ^FD is a field description
                     ^GB is graphic boxes (or lines)
                     ^B sets barcode information
                     ^XZ indicates the end of a label
                     */

                    "^XA" +

                    "^POI^PW400^MNN^LL325^LH0,0" + "\r\n" +

                    "^FO50,50" + "\r\n" + "^A0,N,70,70" + "\r\n" + "^FD Infraccion^FS" + "\r\n" +

                    "^FO50,130" + "\r\n" + "^A0,N,35,35" + "\r\n" + "^FDMunicipal^FS" + "\r\n" +

                    "^FO50,180" + "\r\n" + "^A0,N,25,25" + "\r\n" + "^FDUsuario Movil:^FS" + "\r\n" +

                    "^FO225,180" + "\r\n" + "^A0,N,25,25" + "\r\n" + "^FD" + "" +"^FS" + "\r\n" +

                    "^FO50,220" + "\r\n" + "^A0,N,25,25" + "\r\n" + "^FDFecha:^FS" + "\r\n" +

                    "^FO225,220" + "\r\n" + "^A0,N,25,25" + "\r\n" + "^FD"+ DateTime.Now +"^FS" + "\r\n" +

                    "^FO50,273" + "\r\n" + "^A0,N,30,30" + "\r\n" + "^FDDatos de la Infraccion^FS" + "\r\n" +

                    "^FO280,273" + "\r\n" + "^A0,N,25,25" + "\r\n" + "^FD^FS" + "\r\n" +

                    "^FO50,300" + "\r\n" + "^GB350,5,5,B,0^FS" + "^XZ";

            int headerHeight = 325;

            DateTime date = new DateTime();
            string sdf = "yyyy/MM/dd";
            string dateString = date.ToString(sdf);

            string header = string.Format(tmpHeader, dateString);

            printerConnection.Write(GetBytes(header));

            int heightOfOneLine = 40;

            Double totalPrice = 0;

            Dictionary<string, string> itemsToPrint = createListOfItems();

            foreach (string productName in itemsToPrint.Keys)
            {
                string price;
                itemsToPrint.TryGetValue(productName, out price);

                String lineItem = "^XA^POI^LL40" + "^FO50,10" + "\r\n" + "^A0,N,28,28" + "\r\n" + "^FD{0}^FS" + "\r\n" + "^FO280,10" + "\r\n" + "^A0,N,28,28" + "\r\n" + "^FD^FS" + "^XZ";
                Double tempPrice;
                Double.TryParse(price, out tempPrice);
                totalPrice += tempPrice;
                String oneLineLabel = String.Format(lineItem, productName, price);

                printerConnection.Write(GetBytes(oneLineLabel));

            }

            long totalBodyHeight = (itemsToPrint.Count + 1) * heightOfOneLine;

            long footerStartPosition = headerHeight + totalBodyHeight;

            string tPrice = Convert.ToString(Math.Round((totalPrice), 2));

            String footer = String.Format("^XA^POI^LL600" + "\r\n" +

            "^FO50,1" + "\r\n" + "^GB350,5,5,B,0^FS" + "\r\n" +

            "^FO50,15" + "\r\n" + "^A0,N,40,40" + "\r\n" + "^FD^FS" + "\r\n" +

            "^FO175,15" + "\r\n" + "^A0,N,40,40" + "\r\n" + "^FD$^FS" + "\r\n" +

            "^FO50,130" + "\r\n" + "^A0,N,45,45" + "\r\n" + "^FDFirma Inspector^FS" + "\r\n" +

            "^FO50,190" + "\r\n" + "^GB350,200,2,B^FS" + "\r\n" +

            "^FO50,400" + "\r\n" + "^GB350,5,5,B,0^FS" + "\r\n" +

            "^FO50,420" + "\r\n" + "^A0,N,30,30" + "\r\n" + "^FDwww.AHSEGROUP.com^FS" + "\r\n" +

            "^FO50,470" + "\r\n" + "^B3N,N,45,Y,N" + "\r\n" + "^FD0123456^FS" + "\r\n" + "^XZ", tPrice);

            printerConnection.Write(GetBytes(footer));

        }

        private Dictionary<string, string> createListOfItems()
        {
            String[] names = { "Motivo: ", "Lugar: ", "RUT: ", "Automovil: ", "Modelo: ", "Color: " };
            String[] prices = { "", "", "", "", "", "" };
            Dictionary<string, string> retVal = new Dictionary<string, string>();

            for (int ix = 0; ix < names.Length; ix++)
            {
                retVal.Add(names[ix], prices[ix]);
            }
            return retVal;            
        }

知道如何调用参数打印吗? ....我关联了 2 个模型 UsuariosMovil 和 Violations ...任何人都可以帮助我吗?

我复制并粘贴了您的 sendZplReceipt(IConnection printerConnection)createListOfItems() 方法并进行了测试以查看实际打印的内容。如果您为 String[] prices 数组填写值,则收据中填写的值会得到更正。但是,总价并未添加到收据中。为了解决这个问题,我在

中添加了 {0}
"^FO175,15" + "\r\n" + "^A0,N,40,40" + "\r\n" + "^FD$^FS" + "\r\n" 

将行更改为

"^FO175,15" + "\r\n" + "^A0,N,40,40" + "\r\n" + "^FD[=11=]^FS" + "\r\n" 

这解决了总价未打印在收据上的问题。

String footer = String.Format("^XA^POI^LL600" + "\r\n" +

        "^FO50,1" + "\r\n" + "^GB350,5,5,B,0^FS" + "\r\n" +

        "^FO50,15" + "\r\n" + "^A0,N,40,40" + "\r\n" + "^FD^FS" + "\r\n" +

        "^FO175,15" + "\r\n" + "^A0,N,40,40" + "\r\n" + "^FD[=12=]^FS" + "\r\n" +

        "^FO50,130" + "\r\n" + "^A0,N,45,45" + "\r\n" + "^FDFirma Inspector^FS" + "\r\n" +

        "^FO50,190" + "\r\n" + "^GB350,200,2,B^FS" + "\r\n" +

        "^FO50,400" + "\r\n" + "^GB350,5,5,B,0^FS" + "\r\n" +

        "^FO50,420" + "\r\n" + "^A0,N,30,30" + "\r\n" + "^FDwww.AHSEGROUP.com^FS" + "\r\n" +

        "^FO50,470" + "\r\n" + "^B3N,N,45,Y,N" + "\r\n" + "^FD0123456^FS" + "\r\n" + "^XZ", tPrice);