示例#1
0
        // maybe finish bytes later on
        /// <summary>
        ///
        /// </summary>
        /// <param name="peripheral"></param>
        /// <param name="serviceUuid"></param>
        /// <param name="rxCharacteristicUuid"></param>
        /// <param name="txCharacteristicUuid"></param>
        /// <param name="txNextBytes"></param>
        /// <returns></returns>
        //public static IObservable<Unit> RxFlow(this IPeripheral peripheral,
        //                                       Guid serviceUuid,
        //                                       Guid rxCharacteristicUuid,
        //                                       Guid txCharacteristicUuid,
        //                                       byte[] txNextBytes,
        //                                       Stream writeStream) => Observable.Create<Unit>(ob =>
        //{
        //    var disp = new CompositeDisposable();
        //    IDisposable flowLoop = null;
        //    IGattCharacteristic tx = null;
        //    IGattCharacteristic rx = null;

        //    disp.Add(peripheral
        //        .WhenDisconnected()
        //        .Subscribe(x =>
        //        {
        //            tx = null;
        //            rx = null;
        //            flowLoop?.Dispose();
        //        })
        //    );
        //    disp.Add(peripheral
        //        .WhenKnownCharacteristicsDiscovered(serviceUuid, txCharacteristicUuid, rxCharacteristicUuid)
        //        .Subscribe(x =>
        //        {
        //            if (x.Uuid.Equals(txCharacteristicUuid))
        //                tx = x;

        //            else if (x.Uuid.Equals(rxCharacteristicUuid))
        //                rx = x;

        //            // while connected & not stopped
        //            if (tx != null && rx != null)
        //            {
        //                if (rx.CanNotifyOrIndicate())
        //                {
        //                    flowLoop = rx
        //                        .WhenNotificationReceived()
        //                        .Subscribe(
        //                            y =>
        //                            {
        //                                writeStream.Write(y.Data, 0, y.Data.Length);

        //                                // don't need to await this will progress stream
        //                                tx.Write(txNextBytes).Subscribe();
        //                                //ob.OnNext(Unit.Default);
        //                            },
        //                            ob.OnError
        //                        );
        //                }
        //                else
        //                {
        //                    // TODO: need state hooks so this keeps going like notification pattern
        //                    flowLoop = Observable
        //                        .While(
        //                            () => peripheral.IsConnected() && !disp.IsDisposed,
        //                            Observable.FromAsync(async ct =>
        //                            {
        //                                await tx.Write(txNextBytes).ToTask(ct);
        //                                var result = await rx.Read().ToTask(ct);
        //                                writeStream.Write(result.Data, 0, result.Data.Length);
        //                            })
        //                        )
        //                        .Subscribe(_ => { }, ob.OnError);
        //                }
        //            }
        //        })
        //    );

        //    return () =>
        //    {
        //        disp.Dispose();
        //        flowLoop?.Dispose();
        //    };
        //});


        //public static IObservable<Unit> TxFlow()

        /// <summary>
        /// Used for writing blobs
        /// </summary>
        /// <param name="ch">The characteristic to write on</param>
        /// <param name="value">The bytes to send</param>
        /// <param name="reliableWrite">Use reliable write atomic writing if available (windows and android)</param>
        public static IObservable <BleWriteSegment> BlobWrite(this IGattCharacteristic ch, byte[] value, bool reliableWrite)
        // don't need to dispose of memorystream
        => ch.BlobWrite(new MemoryStream(value), reliableWrite);
示例#2
0
        void PrintText()
        {
            //设置标签纸尺寸,间隙尺寸,并且清空打印缓冲区
            string printstr = String.Format("SIZE {0} mm, {1} mm \r\n", 74, 56);

            printstr += String.Format("GAP {0} mm \r\n", 2);
            printstr += String.Format("CLS \r\n");
            //第一行数据 名称及单据编号
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 6, 24, "TSS32.BF2", 0, 1, 1, "胜京物流收货凭证");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 324, 24, "4", 0, 1, 1, "8542214");
            //画一条细线
            printstr += String.Format("BAR {0},{1},{2},{3} \r\n", 2, 66, 580, 1);
            //代收款及应收款
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 6, 76, "TSS24.BF2", 0, 1, 1, "代收款:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 92, 76, "3", 0, 1, 1, "11.00");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 180, 76, "TSS24.BF2", 0, 1, 1, "应收款:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 284, 76, "3", 0, 1, 1, "11.00");
            //日期及货品
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 6, 106, "TSS24.BF2", 0, 1, 1, "日期:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 76, 110, "2", 0, 1, 1, "2020-11-12 12:00");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 380, 106, "TSS24.BF2", 0, 1, 1, "货品:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 448, 106, "TSS24.BF2", 0, 1, 1, "服装");
            //发站、到站、件数
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 6, 136, "TSS24.BF2", 0, 1, 1, "发站:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 76, 136, "TSS24.BF2", 0, 1, 1, "保定");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 180, 136, "TSS24.BF2", 0, 1, 1, "到站:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 248, 136, "TSS24.BF2", 0, 1, 1, "北京");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 380, 136, "TSS24.BF2", 0, 1, 1, "件数:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 448, 136, "3", 0, 1, 1, "1");
            //收货人、收货电话
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 6, 166, "TSS24.BF2", 0, 1, 1, "收货人:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 94, 166, "TSS24.BF2", 0, 1, 1, "测试");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 180, 166, "TSS24.BF2", 0, 1, 1, "收货电话:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 288, 166, "3", 0, 1, 1, "15010201672");
            //托运人、托运电话
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 6, 196, "TSS24.BF2", 0, 1, 1, "托运人:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 94, 196, "TSS24.BF2", 0, 1, 1, "测试");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 180, 196, "TSS24.BF2", 0, 1, 1, "托运电话:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 288, 196, "3", 0, 1, 1, "15010201672");
            //付款方式、总运费、备注
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 6, 226, "TSS24.BF2", 0, 1, 1, "付款方式:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 110, 226, "TSS24.BF2", 0, 1, 1, "提付");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 180, 226, "TSS24.BF2", 0, 1, 1, "总运费:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 268, 226, "3", 0, 1, 1, "11.00");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 380, 226, "TSS24.BF2", 0, 1, 1, "备注:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 446, 226, "3", 0, 1, 1, "15010201672");
            //分割线
            printstr += String.Format("BAR {0},{1},{2},{3} \r\n", 0, 260, 580, 1);
            //经办人、发货人签字
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 6, 270, "TSS24.BF2", 0, 1, 1, "经办人:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 94, 270, "TSS24.BF2", 0, 1, 1, "测试");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 180, 270, "TSS24.BF2", 0, 1, 1, "发货人签字:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 312, 270, "TSS24.BF2", 0, 1, 1, "测试");
            //发站电话
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 6, 300, "TSS24.BF2", 0, 1, 1, "发站电话:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 110, 300, "3", 0, 1, 1, "15010201672");
            //发站电话
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 6, 330, "TSS24.BF2", 0, 1, 1, "到站电话:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 110, 330, "3", 0, 1, 1, "15010201672");
            //发货存根
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 6, 360, "TSS24.BF2", 0, 1, 1, "发货存根:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 110, 360, "TSS24.BF2", 0, 1, 1, "保丢不保损!");
            //持卡人、卡号
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 6, 390, "TSS24.BF2", 0, 1, 1, "持卡人:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 92, 390, "TSS24.BF2", 0, 1, 1, "测试");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 180, 390, "TSS24.BF2", 0, 1, 1, "卡号:");
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 252, 393, "3", 0, 1, 1, "1234567890");
            //提示信息
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 6, 420, "TSS24.BF2", 0, 1, 1, "货物查询时间为3日内,过期概不负责!");
            //LOGO字符打印
            printstr += String.Format("TEXT {0},{1},\"{2}\",{3},{4},{5},\"{6}\" \r\n", 300, 300, "TSS24.BF2", 0, 3, 3, "胜");
            //打印二维码
            //printstr += String.Format("QRCODE {0},{1},\"{2}\",{3},\"{4}\",{5},\"{6}\" \r\n",400,390,"H",10,"A",0,"www.azure.cn");
            printstr += String.Format("QRCODE {0},{1},{2},{3},{4},{5},\"{6}\" \r\n", 440, 280, "H", 4, "A", 0, "https://www.azure.cn");
            //打印标签
            printstr += String.Format("PRINT {0} \r\n", 1);

            //打印机指令包含中卫应为GB2312,装换之
            byte[] printbytes = Encoding.GetEncoding("UTF-8").GetBytes(printstr);
            printbytes = Encoding.Convert(Encoding.GetEncoding("UTF-8"), Encoding.GetEncoding("GB2312"), printbytes);
            MemoryStream stream = new MemoryStream(printbytes);

            //打印后续操作
            //Write(bs)     小文本打印方式
            _savedCharacteristic?.BlobWrite(stream).Subscribe(
                result => {
                Debug.WriteLine(result.Position);
            },
                exception => {
                ShowMessage("错误", "无法完成打印");
            }
                );
            ShowMessage("信息", "打印完毕");
        }