PrinterHelper.cs 5.3 KB
using OnlineStore.Common;
using System;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DeviceLibrary
{
    public class PrinterHelper
    {
        private Asa.PrintLabel print;
        ZebraPrinterHelper.ZebraManger zebraManger;
        string Port;
        public PrinterHelper() {
            
            print = new Asa.PrintLabel(Application.StartupPath + "\\Label",300);
            
        }

        public bool Connection(string port) {
            Port = port;
            if (port.ToLower()=="usb")
                zebraManger = new ZebraPrinterHelper.ZebraManger("", ZebraPrinterHelper.ConnectionType.UsbDirect);
            else
                zebraManger = new ZebraPrinterHelper.ZebraManger(Port, ZebraPrinterHelper.ConnectionType.Network);
            if (!zebraManger.Connection(out string msg))
            {
                LogUtil.error(msg);
                return false;
            }
            else
                return true;
        }
        public void Close() {
            zebraManger.Close();
        }
        public void EditLabel() {
            print.EditLabel();
        }
        public string[] GetLabelList() {
            return print.GetLabelName();
        }
        public Task<(bool,string)> PrintLabel(ReelParam reel,string labelname)
        {
            return Task.Run(() =>
            {
                //string labelname = Setting_Init.Printer_Labelname;
                Dictionary<string, string> data = new Dictionary<string, string>();
                data.Add("PN", reel.PN);
                data.Add("LOT", reel.LOT);
                data.Add("EXP", reel.EXP);
                data.Add("SN", reel.SN);
                data.Add("Time1", DateTime.Now.ToString("MM-dd-yyyy HH:mm:ss"));
                data.Add("Time2", DateTime.Now.AddHours(4).ToString("MM-dd-yyyy HH:mm:ss"));
                data.Add("Time3", DateTime.Now.AddHours(5*24+4).ToString("MM-dd-yyyy HH:mm:ss"));
                data.Add("datetime", DateTime.Now.ToString());
                LogUtil.info($"打印标签:{reel.ToDetailStr()}");
                var result = Print(labelname, data, out string msg);
                //Task.Delay(500).Wait();
                return (result,msg);
            });
        }
        bool Print(string labelname,Dictionary<string, string> data,out string msg) {
            msg = "";
            print.LoadLabel(labelname);
            var bmp =  print.PrintPreview(data);
            //LogUtil.info("标签图像生成");
            //bmp.Save("currentlabel.bmp");
            try
            {
                //if (!zebraManger.PrintImage(bmp,bmp.Width*3, bmp.Height * 3, out msg, false))
                if (!zebraManger.PrintImage(bmp, out msg, false))
                {
                    LogUtil.error(msg);
                    return false;
                }
            }
            catch (Exception ex)
            {
                LogUtil.error(ex.ToString()); 
                return false;
            }
            finally
            {
                bmp.Dispose();
            }
            return true;
        }

        public Task<(bool, string)> IsLabelOnPeeler()
        {
            return Task.Run(() =>
            {
                return (zebraManger.IsLabelOnPeeler,"");
            });
        }


        public Bitmap ConvertTo24bppTo1bpp(Bitmap SrcImg)

        {
            unsafe
            {
                byte* SrcPointer, DestPointer;
                int Width, Height, SrcStride, DestStride;
                int X, Y, Index, Sum; ;
                Bitmap DestImg = new Bitmap(SrcImg.Width, SrcImg.Height, PixelFormat.Format1bppIndexed);
                BitmapData SrcData = new BitmapData();
                SrcImg.LockBits(new Rectangle(0, 0, SrcImg.Width, SrcImg.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb, SrcData);
                BitmapData DestData = new BitmapData();
                DestImg.LockBits(new Rectangle(0, 0, SrcImg.Width, SrcImg.Height), ImageLockMode.ReadWrite, PixelFormat.Format1bppIndexed, DestData);
                Width = SrcImg.Width; Height = SrcImg.Height; SrcStride = SrcData.Stride; DestStride = DestData.Stride;
                for (Y = 0; Y < Height; Y++)
                {
                    SrcPointer = (byte*)SrcData.Scan0 + Y * SrcStride;
                    DestPointer = (byte*)DestData.Scan0 + Y * DestStride;
                    Index = 7; Sum = 0;
                    for (X = 0; X < Width; X++)
                    {
                        if (*SrcPointer + (*(SrcPointer + 1) << 1) + *(SrcPointer + 2) >= 512) Sum += (1 << Index);
                        if (Index == 0)
                        {
                            *DestPointer = (byte)Sum;
                            Sum = 0;
                            Index = 7;
                            DestPointer++;
                        }
                        else
                            Index--;
                        SrcPointer += 3;
                    }
                    if (Index != 7) *DestPointer = (byte)Sum;
                }
                SrcImg.UnlockBits(SrcData);
                DestImg.UnlockBits(DestData);
                return DestImg;
            }
        }

    }
}