private void btnDownload_Click(object sender, EventArgs e) { try { //执行下载之前,先扫描是否存在打印机, 如果存在就下发,如果不存在就提示用户 if (null == _pmjSerialPort) { _pmjSerialPort = new PmjSerialPort(comboBoxPmj.Text, new PmjDataRecv()); } var flagPrinter = _pmjSerialPort.HasPrinter(out string printerName); lbPmjStatus.Text = printerName; if (!flagPrinter) { MessageBox.Show("没有扫描到打印机"); return; } //判断下发对象是否存在 if (_pmjDataList.Count == 0) { MessageBox.Show("请编辑下发对象"); return; } //获取File的列表 var cmbData = cmbFileList.SelectedItem as CmbDataItem; //下发下载的指令 var commandDownload = CommandFactory.GetDownloadCommand((byte)cmbData.Value); var result = _pmjSerialPort.SendCommand(commandDownload, out DataResult dataResult); if (!result) { MessageBox.Show("下发下载文件的命令执行失败"); return; } // foreach (var item in _pmjDataList) { //下发文本 if (item.DataType == EnumPmjData.文本) { var label = item.Control as Label; var settingPanel = (item.DataSource as TextSettingParameter).UserControl as TextSetting; var commandText = CommandFactory.GetTextCommand((ushort)(label.Left / 2), (ushort)(label.Top / 2), Encoding.Default.GetBytes(label.Text), (ushort)settingPanel.GetSelectFont().Value); var resultForSend = _pmjSerialPort.SendCommand(commandText, out DataResult resultF); if (!resultForSend) { MessageBox.Show("文本命令下发失败"); break; } } //下发序列号 if (item.DataType == EnumPmjData.序号) { var lable = item.Control as Label; var settingPanel = (item.DataSource as SerialNumberParameter).UserControl as SerialNumberSetting; var timeCommand = CommandFactory.GetSerialNumberCommand((ushort)lable.Text.Length, (ushort)settingPanel.GetFontValue(), (ushort)(lable.Left / 2), (ushort)(lable.Top / 2), (ushort)settingPanel.GetIntervalValue(), (uint)settingPanel.GetInitValue()); var resultForSend = _pmjSerialPort.SendCommand(timeCommand, out DataResult resultF); if (!resultForSend) { MessageBox.Show("序列号命令下发失败"); break; } } //下发设置的时间 if (item.DataType == EnumPmjData.时间) { var label = item.Control as Label; var settingPanel = (item.DataSource as TimeSettingParameter).UserControl as TimeSetting; var format = settingPanel.GetTimeFormat(); var fontSize = settingPanel.GetFongValue(); //获取时间的偏移量 var timeOffset = settingPanel.GetTimeOffSet(); var commandTime = CommandFactory.GetTimeCommand(format, (ushort)fontSize, (ushort)(label.Left / 2), (ushort)(label.Top / 2), timeOffset); var resultForSend = _pmjSerialPort.SendCommand(commandTime, out DataResult resultF); if (!resultForSend) { MessageBox.Show("时间命令下发失败"); break; } } //图片 if (item.DataType == EnumPmjData.图片 || item.DataType == EnumPmjData.二维码 || item.DataType == EnumPmjData.条码) { var control = (item.Control as PictureBox); var bitmap = control.Image as Bitmap; Console.WriteLine($"图片大小 width:{bitmap.Width} height:{bitmap.Height}"); var flagImage = _pmjSerialPort.WriteImageBuffer(bitmap, control.Left / 2, control.Top / 2); if (!flagImage) { MessageBox.Show("图片命令下发失败"); break; } } } //结束下载,首先获取x的最大的终点 var xEnd = GetEndX(); var command = CommandFactory.GetFinishDownloadCommand(0, (ushort)xEnd); var flag = _pmjSerialPort.SendCommand(command, out DataResult p); if (!flag) { MessageBox.Show("结束下载命令下发失败"); return; } MessageBox.Show("下载文件成功"); return; }catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// 打印文件,如果收到数据就代表打印完成 /// </summary> public DataResult Print() { var command = CommandFactory.GetPrintOnceCommand(); return(WriteForResult(command, 2000)); }