public void set(string key, string value)
        {
            if (ActivePrinterProfile.Instance.ActivePrinter == null)
            {
                //No printer selected
            }
            else
            {
                LoadDataIfNeeded();

                PrinterSetting setting;
                if (settingsDictionary.ContainsKey(key))
                {
                    setting = settingsDictionary[key];
                }
                else
                {
                    setting           = new PrinterSetting();
                    setting.Name      = key;
                    setting.PrinterId = ActivePrinterProfile.Instance.ActivePrinter.Id;

                    settingsDictionary[key] = setting;
                }

                setting.Value = value;
                setting.Commit();
            }
        }
        private void getPrinters()
        {
            PrintDocument printDocument = new PrintDocument();

            PrinterSettings.StringCollection printers = PrinterSettings.InstalledPrinters;
            List <string> result = new List <string>();

            foreach (string item in printers)
            {
                result.Add(item);
                Console.WriteLine(item);
            }
            if (Setting.Printers == null || Setting.Printers.Count == 0)
            {
                if (Setting.Printers == null)
                {
                    Setting.Printers = new ObservableCollection <PrinterSetting>();
                }
                // Setting.Printer = printDocument.PrinterSettings.PrinterName;
                // 配置默认打印机
                PrinterSetting p = new PrinterSetting();
                p.ID         = "default";
                p.Printer    = printDocument.PrinterSettings.PrinterName;
                p.MarginTop  = 0;
                p.MarginLeft = 0;
                p.Landscape  = false;
                p.Paper      = "1";

                Setting.Printers.Add(p);
            }

            this.combBoxPrinter.ItemsSource = result;
        }
Example #3
0
        private void SavePaper()
        {
            
            //从注册表寻找pmp文件的位置
            string keyPath = @"Software\Autodesk\AutoCAD\R22.0\ACAD-1001:804";
            string keyName = "RoamableRootFolder";
            object FindPC3_Path = RegistryHelpers.GetRegistryValue(keyPath, keyName);
            string pmp_path = (string)FindPC3_Path + "Plotters\\PMP Files\\";

            PrinterSetting paper = new PrinterSetting();

            DB.BLL.PAPER_SIZE papers = new DB.BLL.PAPER_SIZE();
            DataSet papers_list = papers.GetList("1=1");
            DataTable row = papers_list.Tables[0];
            foreach (DataGridViewRow r in dgv_PaperSizeList.Rows)
            {
                paper.PaperX = Convert.ToDouble(r.Cells[2].Value) * 10;
                paper.PaperY = Convert.ToDouble(r.Cells[3].Value) * 10;
                paper.userdef_name = (string)r.Cells[1].Value;

                //三个打印机,添加三次
                paper.AddPrinter(pmp_path + "DWG To PDF.pmp");
                paper.AddPrinter(pmp_path + "PublishToWeb JPG.pmp");
                paper.AddPrinter(pmp_path + "PublishToWeb PNG.pmp");
            }
        }
Example #4
0
 /// <summary>
 /// 判断is已经改变过默认打印机的纸张
 /// 张刊
 /// 2016年8月18日
 /// [email protected]
 /// </summary>
 /// <param name="FormName">纸张名称</param>
 /// <param name="width">宽</param>
 /// <param name="length">高</param>
 /// <returns>已变更:False   反之为True</returns>
 public static bool IsChange(string FormName, int width, int length)
 {
     dm = PrinterSetting.GetPrinterDemode(null);
     if (FormName == dm.dmFormName && width == dm.dmPaperWidth && length == dm.dmPaperLength)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
        private void buttonAdd_Click(object sender, RoutedEventArgs e)
        {
            // 添加打印机
            PrinterSetting p = new PrinterSetting();

            p.ID         = "new";
            p.MarginTop  = 0;
            p.MarginLeft = 0;
            p.Landscape  = false;
            p.Paper      = "1";
            Setting.Printers.Add(p);

            Setting.SelectedID = "new";
        }
Example #6
0
        /// <summary>
        ///     Export a temporary file and send command to label printer.
        /// </summary>
        /// <param name="printerSetting"></param>
        /// <param name="path"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public void ExportLabelPrint(PrinterSetting printerSetting, string path, string data)
        {
            if (!Directory.Exists(path))
            {
                _log.Debug(string.Format("{0} doesn't exist. Initiate the folder", path));
                Directory.CreateDirectory(path);
            }
            // Generate temporary file.
            var fileName = string.Format("{0}.txt", Guid.NewGuid().ToString("D"));
            var file     = Path.Combine(path, fileName);

            File.WriteAllText(file, data);

            var commandCopy = string.Format("copy /B \"{0}\" \"{1}\"", file, printerSetting.Ip);

            _log.Debug(string.Format("Executed command {0}", commandCopy));
            ExecuteCommand(commandCopy);

            //File.Delete(file);
        }
Example #7
0
        public SetSettingDialog(SettingsDemo settingsDemo, PrinterManager printerManager, PrinterSetting printerSetting)
        {
            InitializeComponent();

            viewModel                 = DataContext as SetSettingsDialogViewModel;
            this.settingsDemo         = settingsDemo;
            this.printerManager       = printerManager;
            viewModel.SettingName     = printerSetting.Setting;
            viewModel.OldSettingValue = printerSetting.Value;
            viewModel.NewSettingValue = printerSetting.Value;

            UpdateRangeAndType();
        }
Example #8
0
        private void SetButton_Click(object sender, RoutedEventArgs e)
        {
            PrinterSetting printerSetting = ((FrameworkElement)sender).DataContext as PrinterSetting;

            new SetSettingDialog(this, printerManager, printerSetting).ShowDialog();
        }
        /// <summary>
        /// 打印
        /// </summary>
        /// <param name="seq">序号,用于区分回调</param>
        /// <param name="printerName">打印机,如果不指定,则使用画面上的打印机</param>
        /// <param name="imageList">待打印图片列表</param>
        protected void printImage(string seq, string printer, List <KeyValuePair <string, string> > imageList)
        {
            // 根据名称获取对应打印机
            PrinterSetting printerSetting = null;

            foreach (PrinterSetting ps in PrintSetting.Printers)
            {
                if (String.IsNullOrEmpty(printer) && ps.IsDefault)
                {
                    printerSetting = ps;
                    break;
                }
                if (ps.ID == printer || ps.Printer == printer)
                {
                    printerSetting = ps;
                    break;
                }
            }

            if (printerSetting == null)
            {
                // 未找到指定打印机

                return;
            }

            // 设置打印时不再弹打印进度弹窗
            PrintController printController = new StandardPrintController();
            PrintDocument   printDoc        = new PrintDocument();

            printDoc.DefaultPageSettings.Landscape = printerSetting.Landscape;
            printDoc.PrinterSettings.PrinterName   = printerSetting.Printer;
            printDoc.PrinterSettings.Copies        = 1;
            //if (!String.IsNullOrEmpty(seq)) {
            //    printDoc.PrinterSettings.PrintFileName = seq;
            //}
            // printDoc.OriginAtMargins = true;
            printDoc.PrintController = printController;
            // 开始打印事件
            printDoc.BeginPrint += (object sender, PrintEventArgs e) =>
            {
                Logger.InfoLog("print begin" + seq);
                WsResponse <string> br = new WsResponse <string>();
                br.Seq  = seq;
                br.Data = "begin";
                Send(JsonConvert.SerializeObject(br));
            };

            // 结束打印事件
            printDoc.EndPrint += (object sender, PrintEventArgs e) =>
            {
                Logger.InfoLog("print end " + seq);
                WsResponse <string> er = new WsResponse <string>();
                er.Seq  = seq;
                er.Data = "end";
                Send(JsonConvert.SerializeObject(er));
            };

            int page = 1;

            // 打印,每一页执行一次该事件
            printDoc.PrintPage += (object sender, PrintPageEventArgs e) =>
            {
                // inch
                int x = toInchX100(printerSetting.MarginLeft);
                int y = toInchX100(printerSetting.MarginTop);
                // inch
                int xr = toInchX100(printerSetting.MarginRight);
                int yb = toInchX100(printerSetting.MarginBottom);

                int w = 300, h = 551;
                switch (printerSetting.Paper)
                {
                case "1":
                {
                    w = 300;         // 285; // 300* 0.95
                    h = 511;         // 485; // 511 * 0.95
                    break;
                }

                case "2":
                {
                    w = toInchX100(100);
                    h = toInchX100(180);
                    break;
                }

                case "3":
                default:
                {
                    w = toInchX100(100);
                    h = toInchX100(180);
                }
                break;
                }
                e.PageSettings.Margins.Left   = 0;
                e.PageSettings.Margins.Top    = 0;
                e.PageSettings.Margins.Bottom = 0;
                e.PageSettings.Margins.Right  = 0;
                e.PageSettings.PaperSize      = new PaperSize("自定义", w, h);

                //foreach (KeyValuePair<string, string> image in imageList)
                //{

                KeyValuePair <string, string> image = imageList[page - 1];
                // Image i = Image.FromFile(image);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(image.Value);
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) //获得响应)
                {
                    if (response.StatusCode != HttpStatusCode.OK)
                    {
                        WsResponse <KeyValuePair <string, string> > rerr = new WsResponse <KeyValuePair <string, string> >();
                        rerr.Seq  = seq;
                        rerr.Code = "NET_ERR";
                        rerr.Data = new KeyValuePair <string, string>(image.Key, "error:" + response.StatusCode);
                        string msgerr = JsonConvert.SerializeObject(rerr);
                        Send(msgerr);
                    }
                    else
                    {
                        using (Stream stream = response.GetResponseStream())
                        {
                            Image img = Image.FromStream(stream);///实例化,得到img
                            //                Conole.wrimg.Width       img.Height
                            Console.WriteLine(img.Width + "x" + img.Height);
                            Console.WriteLine(e.PageSettings.HardMarginX + "x" + e.PageSettings.HardMarginY);

                            if (printerSetting.AutoSize)
                            {
                                // e.MarginBounds
                                e.MarginBounds.Offset(0, 0);
                                //Console.WriteLine(e.MarginBounds);
                                //Rectangle rect = new Rectangle(x, y, w - x - xr, h - y - yb);
                                //e.Graphics.DrawImage(img, rect);
                                e.Graphics.DrawImage(img, e.MarginBounds);
                            }
                            else
                            {
                                e.MarginBounds.Offset(0, 0);
                                e.Graphics.DrawImage(img, e.PageSettings.HardMarginX + x, e.PageSettings.HardMarginY + y, w, h);
                            }
                        }
                        Logger.InfoLog("print printed" + image.Key + "  data:" + image.Value);

                        WsResponse <KeyValuePair <string, string> > rimage = new WsResponse <KeyValuePair <string, string> >();
                        rimage.Seq  = seq;
                        rimage.Data = new KeyValuePair <string, string>(image.Key, "printed");
                        string msgImage = JsonConvert.SerializeObject(rimage);
                        Send(msgImage);
                    }
                }
                //}

                if (page < imageList.Count)
                {
                    // 表示还有下一页,
                    e.HasMorePages = true;
                }
                else
                {
                    e.HasMorePages = false;
                }
                page++;
            };

            printDoc.Print();

            WsResponse <string> r = new WsResponse <string>();

            r.Seq  = seq;
            r.Data = "printed";
            string msg = JsonConvert.SerializeObject(r);

            Send(msg);
        }
Example #10
0
    /// <summary>
    /// 改变打印机的设置
    /// 张刊
    /// 2016年8月18日
    /// [email protected]
    /// </summary>
    /// <param name="PrinterName">打印机名称,如果为空则使用默认打印机</param>
    /// <param name="PS">需要改变的信息</param>
    /// <returns>是否改变成功</returns>
    public static bool ModifyPrintInfo3(string PrinterName, ref PrinterData PS)
    {
        pd.pDatatype     = 0;
        pd.pDevMode      = 0;
        pd.DesiredAccess = PRINTER_ALL_ACCESS;
        if (PrinterName == string.Empty || PrinterName == null)
        {
            PrinterName = GetDeaultPrinterName();
        }
        nRet = Convert.ToInt32(OpenPrinter(PrinterName, out hPrinter, ref pd));
        if (nRet == 0)
        {
            lastError = Marshal.GetLastWin32Error();
            throw new Win32Exception(Marshal.GetLastWin32Error());
        }
        //调用GetPrinter获取PRINTER_INFO_2在内存的字节数
        GetPrinter(hPrinter, 2, IntPtr.Zero, 0, out nBytesNeeded);
        if (nBytesNeeded <= 0)
        {
            ClosePrinter(hPrinter);
            return(false);
        }
        //为PRINTER_INFO_2分配足够的内存
        ptrPrinterInfo = Marshal.AllocHGlobal(nBytesNeeded);
        if (ptrPrinterInfo == IntPtr.Zero)
        {
            ClosePrinter(hPrinter);
            return(false);
        }

        //调用GetPrinter填充当前设定,所要改变的信息(ptrPrinterInfo中)
        if (!GetPrinter(hPrinter, 2, ptrPrinterInfo, nBytesNeeded, out nBytesNeeded))
        {
            Marshal.FreeHGlobal(ptrPrinterInfo);
            ClosePrinter(hPrinter);
            return(false);
        }
        //把内存中指向PRINTER_INFO_2的指针转化为PRINTER_INFO_2结构
        //如果GetPrinter没有得到DEVMODE结构,尝试调用DocumentProperties得到DEVMODE结构
        pinfo = (PRINTER_INFO_2)Marshal.PtrToStructure(ptrPrinterInfo, typeof(PRINTER_INFO_2));
        IntPtr Temp = new IntPtr();

        if (pinfo.pDevMode == IntPtr.Zero)
        {
            // If GetPrinter didn't fill in the DEVMODE, try to get it by calling
            // DocumentProperties...
            IntPtr ptrZero = IntPtr.Zero;
            //get the size of the devmode structure
            nBytesNeeded = DocumentProperties(IntPtr.Zero, hPrinter, PrinterName, IntPtr.Zero, IntPtr.Zero, 0);
            if (nBytesNeeded <= 0)
            {
                Marshal.FreeHGlobal(ptrPrinterInfo);
                ClosePrinter(hPrinter);
                return(false);
            }
            ptrDM = Marshal.AllocCoTaskMem(nBytesNeeded);
            int i;
            i = DocumentProperties(IntPtr.Zero, hPrinter, PrinterName, ptrDM, ptrZero, DM_OUT_BUFFER);
            if ((i < 0) || (ptrDM == IntPtr.Zero))
            {
                //Cannot get the DEVMODE structure.
                Marshal.FreeHGlobal(ptrDM);
                ClosePrinter(ptrPrinterInfo);
                return(false);
            }
            pinfo.pDevMode = ptrDM;
        }
        dm = (DEVMODE)Marshal.PtrToStructure(pinfo.pDevMode, typeof(DEVMODE));
        //修改打印机的设定信息
        if ((((int)PS.Duplex < 0) || ((int)PS.Duplex > 3)))
        {
            throw new ArgumentOutOfRangeException("nDuplexSetting", "nDuplexSetting is incorrect.");
        }
        else
        {
            if (PrinterName == string.Empty || PrinterName == null)
            {
                PrinterName = GetDeaultPrinterName();
            }
            if ((int)PS.Size != 0)
            {
                dm.dmPaperSize = (short)PS.Size;
                dm.dmFields   |= DM_PAPERSIZE;
            }
            if (PS.pWidth != 0)
            {
                dm.dmPaperWidth = (short)PS.pWidth;
                dm.dmFields    |= DM_PAPERWIDTH;
            }
            if (PS.pLength != 0)
            {
                dm.dmPaperLength = (short)PS.pLength;
                dm.dmFields     |= DM_PAPERLENGTH;
            }
            if (PS.pFormName != null && PS.pFormName != string.Empty)
            {
                dm.dmFormName = PS.pFormName;
                dm.dmFields  |= DM_FORMNAME;
            }
            if ((int)PS.Orientation != 0)
            {
                dm.dmOrientation = (short)PS.Orientation;
                dm.dmFields     |= DM_ORIENTATION;
            }
            Marshal.StructureToPtr(dm, pinfo.pDevMode, true);
            Marshal.StructureToPtr(pinfo, ptrPrinterInfo, true);
            pinfo.pSecurityDescriptor = IntPtr.Zero;
            //Make sure the driver_Dependent part of devmode is updated...
            nRet = DocumentProperties(IntPtr.Zero, hPrinter, PrinterName, pinfo.pDevMode, pinfo.pDevMode, DM_IN_BUFFER | DM_OUT_BUFFER);
            if (nRet <= 0)
            {
                Marshal.FreeHGlobal(ptrPrinterInfo);
                ClosePrinter(hPrinter);
                return(false);
            }

            //SetPrinter 更新打印机信息
            if (!SetPrinter(hPrinter, 2, ptrPrinterInfo, 0))
            {
                Marshal.FreeHGlobal(ptrPrinterInfo);
                ClosePrinter(hPrinter);
                return(false);
            }
            //通知其他应用程序,打印机信息已经更改
            PrinterSetting.SendMessageTimeout(new IntPtr(HWND_BROADCAST), WM_SETTINGCHANGE, IntPtr.Zero, IntPtr.Zero, PrinterSetting.SendMessageTimeoutFlags.SMTO_NORMAL, 1000, out hDummy);

            //释放
            if (ptrPrinterInfo == IntPtr.Zero)
            {
                Marshal.FreeHGlobal(ptrPrinterInfo);
            }
            if (hPrinter == IntPtr.Zero)
            {
                Marshal.FreeHGlobal(hPrinter);
            }

            return(true);
        }
    }
Example #11
0
    /// <summary>
    /// 改变打印机的设置
    /// 张刊
    /// 2016年8月18日
    /// [email protected]
    /// </summary>
    /// <param name="PrinterName">打印机名称,如果为空则使用默认打印机</param>
    /// <param name="PS">需要改变的信息</param>
    /// <returns>是否改变成功</returns>
    public static void ModifyPrintInfo2(string PrinterName, ref PrinterData PS)
    {
        PRINTER_INFO_9 printerInfo;

        printerInfo.pDevMode = IntPtr.Zero;
        if (PrinterName == string.Empty || PrinterName == null)
        {
            PrinterName = GetDeaultPrinterName();
        }
        pd.pDatatype     = 0;
        pd.pDevMode      = 0;
        pd.DesiredAccess = PRINTER_ALL_ACCESS;
        if (OpenPrinter(PrinterName, out hPrinter, ref pd))
        {
            try
            {
                //得到结构体DEVMODE的大小
                int iDevModeSize = DocumentProperties(IntPtr.Zero, hPrinter, PrinterName, IntPtr.Zero, IntPtr.Zero, 0);
                if (iDevModeSize < 0)
                {
                    throw new ApplicationException("Cannot get the size of the DEVMODE structure.");
                }
                //分配指向结构体DEVMODE的内存缓冲区
                IntPtr hDevMode = Marshal.AllocCoTaskMem(iDevModeSize + 100);
                //得到一个指向DEVMODE内存缓存的指针
                nRet = DocumentProperties(IntPtr.Zero, hPrinter, PrinterName, hDevMode, IntPtr.Zero, DM_OUT_BUFFER);
                if (nRet < 0)
                {
                    throw new ApplicationException("Cannot get the size of the DEVMODE structure.");
                }
                //給dm賦值
                dm = (DEVMODE)Marshal.PtrToStructure(hDevMode, dm.GetType());

                if ((((int)PS.Duplex < 0) || ((int)PS.Duplex > 3)))
                {
                    throw new ArgumentOutOfRangeException("nDuplexSetting", "nDuplexSetting is incorrect.");
                }
                else
                {
                    //更改printersetting
                    if ((int)PS.Size != 0)
                    {
                        dm.dmPaperSize = (short)PS.Size;
                        dm.dmFields   |= DM_PAPERSIZE;
                    }
                    if (PS.pWidth != 0)
                    {
                        dm.dmPaperWidth = (short)PS.pWidth;
                        dm.dmFields    |= DM_PAPERWIDTH;
                    }
                    if (PS.pLength != 0)
                    {
                        dm.dmPaperLength = (short)PS.pLength;
                        dm.dmFields     |= DM_PAPERLENGTH;
                    }
                    if (PS.pFormName != null && PS.pFormName != string.Empty)
                    {
                        dm.dmFormName = PS.pFormName;
                        dm.dmFields  |= DM_FORMNAME;
                    }
                    if ((int)PS.Orientation != 0)
                    {
                        dm.dmOrientation = (short)PS.Orientation;
                        dm.dmFields     |= DM_ORIENTATION;
                    }
                    Marshal.StructureToPtr(dm, hDevMode, true);

                    //                        pinfo.pDevMode = hDevMode;
                    //                        pinfo.pSecurityDescriptor = IntPtr.Zero;
                    //                        /*update driver dependent part of the DEVMODE
                    //                        1 = DocumentProperties(IntPtr.Zero, hPrinter, sPrinterName, yDevModeData, ref pinfo.pDevMode, (DM_IN_BUFFER | DM_OUT_BUFFER));*/
                    //                        Marshal.StructureToPtr(pinfo,ptrPrinterInfo,true);
                    //得到printer info的大小
                    nRet = DocumentProperties(IntPtr.Zero, hPrinter, PrinterName, printerInfo.pDevMode, printerInfo.pDevMode, DM_IN_BUFFER | DM_OUT_BUFFER);
                    if (nRet < 0)
                    {
                        throw new ApplicationException("Unable to set the PrintSetting for this printer");
                    }
                    GetPrinter(hPrinter, 9, IntPtr.Zero, 0, out nBytesNeeded);
                    if (nBytesNeeded == 0)
                    {
                        throw new ApplicationException("GetPrinter failed.Couldn't get the nBytesNeeded for shared PRINTER_INFO_9 structure");
                    }
                    //分配内存缓冲区大小
                    ptrPrinterInfo = Marshal.AllocCoTaskMem(nBytesNeeded);
                    bool bSuccess = GetPrinter(hPrinter, 9, ptrPrinterInfo, nBytesNeeded, out nJunk);
                    if (!bSuccess)
                    {
                        throw new ApplicationException("GetPrinter failed.Couldn't get the nBytesNeeded for shared PRINTER_INFO_9 structure");
                    }
                    //赋值printerInfo
                    printerInfo          = (PRINTER_INFO_9)Marshal.PtrToStructure(ptrPrinterInfo, printerInfo.GetType());
                    printerInfo.pDevMode = hDevMode;

                    //获取一个指向 PRINTER_INFO_9结构的指针
                    Marshal.StructureToPtr(printerInfo, ptrPrinterInfo, true);
                    //设置打印机
                    bSuccess = SetPrinter(hPrinter, 9, ptrPrinterInfo, 0);
                    if (!bSuccess)
                    {
                        throw new Win32Exception(Marshal.GetLastWin32Error(), "SetPrinter() failed.Couldn't set the printer settings");
                    }

                    PrinterSetting.SendMessageTimeout(new IntPtr(HWND_BROADCAST), WM_SETTINGCHANGE, IntPtr.Zero, IntPtr.Zero, PrinterSetting.SendMessageTimeoutFlags.SMTO_NORMAL, 1000, out hDummy);
                }
            }
            finally
            {
                ClosePrinter(hPrinter);
            }
        }
    }