2017-07-07 126 views
0

我正在開發Xamarin PCL類型的應用程序...設法搜索打印機,連接打印機,但是當我想打印我的變量時,這些不會被打印....(但是,如果您打印憑藉默認帶來的憑證)我正在佔領SDK Zebra LinkOS_XamarinSDK,我附上我的代碼....對我有幫助嗎?打印藍牙Xamarin

我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${1}^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" + "^FD^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和違規...任何人都可以幫助我?

+0

你可以添加什麼打印圖片? – banno

+0

我的優惠券的圖像?或者我的屏幕的圖像? @banno –

回答

1

我複製並粘貼了您的sendZplReceipt(IConnection printerConnection)createListOfItems()方法並進行測試以查看實際打印的內容。如果填寫String[] prices數組的值,則在收據中填寫更正的值。但是,總價並未添加到收據中。爲了解決這個問題,我在

"^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${0}^FS" + "\r\n" 

這種固定不被打印在收據的總價格的問題加入{0}

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${0}^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" + "^FD^FS" + "\r\n" + "^XZ", tPrice);