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; }
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"); } }
/// <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"; }
/// <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); }
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(); }
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); }
/// <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); } }
/// <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); } } }