void button1_Click(object sender, EventArgs e) { PrinterData pd = ps.GetPrinterSettings(PrinterName); pd.Size = ((PaperSize)combobox1.SelectedItem).RawKind; ps.ChangePrinterSetting(PrinterName, pd); }
/// <summary> /// 打印图片(单张) /// </summary> public static string PrintImage(PrinterData printerData) { try { if (string.IsNullOrEmpty(printerData.printerName)) { return("请先设置默认打印机"); } if (string.IsNullOrEmpty(printerData.filePath) && string.IsNullOrEmpty(printerData.imgBase64) && printerData.image == null) { return("要打印的数据不存在"); } var printType = (printerData.printType).ToUpper(); if (!string.IsNullOrEmpty(printerData.filePath) || !string.IsNullOrEmpty(printerData.imgBase64)) { printerData.image = (printType == "FILEPATH" || printType == "HTML") ? new Bitmap(printerData.filePath) : Base64ToImg((printerData.imgBase64).Replace(@"data:image/jpeg;base64,", "")); } SetImgWHByReportScaleRatio(ref printerData); printerData.direction = DirectionByImageWH(printerData); PrintImagePage(printerData); } catch (Exception ex) { return("打印出错【" + ex.Message + "】"); } return("打印成功!"); }
private static void GetPrinters() { try { ManagementObjectSearcher myPrinterObject = new ManagementObjectSearcher("select * from Win32_Printer"); foreach (ManagementObject obj in myPrinterObject.Get()) { Console.WriteLine("Name - " + obj["Name"]); Console.WriteLine("Network - " + obj["Network"]); Console.WriteLine("Availability - " + obj["Availability"]); Console.WriteLine("Is default printer - " + obj["Default"]); Console.WriteLine("DeviceID - " + obj["DeviceID"]); Console.WriteLine("Status - " + obj["Status"]); var data = new PrinterData() { Name = obj["Name"].ToString(), Network = obj["Network"].ToString(), Availability = obj["Availability"] != null ? obj["Availability"].ToString() : "", IsDefault = obj["Default"].ToString(), DeviceID = obj["DeviceID"].ToString(), Status = obj["Status"].ToString(), }; _AssetDataService.CreatePrinterData(_MachineData.Id, data); } } catch (Exception e) { _AssetDataService.CreateError(_MachineData.Id, "GetPrinters", e); } }
public static BaseResult PrintTxt(PrinterData printerData) { try { if (string.IsNullOrEmpty(printerData.printerName)) { return(BaseResult.Error("请先设置默认打印机")); } if (string.IsNullOrEmpty(printerData.data)) { return(BaseResult.Error("要打印的数据不存在")); } streamToPrint = printerData.printType == "FILEPATH" ? new StreamReader(printerData.data) : new StreamReader(printerData.data); try { printFont = new Font("Arial", 10); PrintDocument pd = new PrintDocument(); pd.PrintPage += new PrintPageEventHandler (PdPrintPage); pd.Print(); } finally { streamToPrint.Close(); } } catch (Exception e) { return(BaseResult.Error(e.Message)); } return(BaseResult.Success("")); }
public static void SetImgWHByReportScaleRatio(ref PrinterData printerData) { if (printerData.direction == "0" && !string.IsNullOrEmpty(printerData.printImageReportScaleRatio)) { printerData.width = Convert.ToInt32(printerData.image.Width * Convert.ToDecimal(printerData.printImageReportScaleRatio)); printerData.height = Convert.ToInt32(printerData.image.Height * Convert.ToDecimal(printerData.printImageReportScaleRatio)); } }
public void CreatePrinterData(int probeDataId, PrinterData data) { data.ProbeDataId = probeDataId; data.CreatedOn = DateTime.UtcNow; _Context.PrinterData.Add(data); _Context.SaveChanges(); }
public bool ChangePrinterSetting(string printerName, ref PrinterData PS, bool bl) { if ((((int)PS.Duplex < 1) || ((int)PS.Duplex > 3)) && bl) { throw new ArgumentOutOfRangeException("nDuplexSetting", "nDuplexSetting is incorrect."); } else { PrintDocument pd = new PrintDocument(); dm = this.GetPrinterSettings(printerName); if (bl) { /*dm.dmFields |= (int)DmFields.DM_DUPLEX | (int)DmFields.DM_ORIENTATION | (int)DmFields.DM_DEFAULTSOURCE | (int)DmFields.DM_PAPERSIZE | (int)DmFields.DM_PAPERLENGTH | (int)DmFields.DM_PAPERWIDTH; */ dm.dmDuplex = (short)PS.Duplex; dm.dmOrientation = (short)PS.Orientation; } else { PS.pmFields = dm.dmFields; PS.Duplex = (PageDuplex)dm.dmDuplex; PS.Orientation = (PageOrientation)dm.dmOrientation; PS.source = (PaperSource)dm.dmDefaultSource; PS.Size = (PaperSize)dm.dmPaperSize; PS.pLength = dm.dmPaperLength; PS.pWidth = dm.dmPaperWidth; } Marshal.StructureToPtr(dm, yDevModeData, true); pinfo.pDevMode = yDevModeData; 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); lastError = Marshal.GetLastWin32Error(); nRet = Convert.ToInt16(SetPrinter(hPrinter, 2, ptrPrinterInfo, 0)); if (nRet == 0) { lastError = Marshal.GetLastWin32Error(); throw new Win32Exception(Marshal.GetLastWin32Error()); } if (hPrinter != IntPtr.Zero) { ClosePrinter(hPrinter); } return(Convert.ToBoolean(nRet)); } }
public static string PrintPdf(PrinterData printerData) { try { if (string.IsNullOrEmpty(printerData.printerName)) { return("请先设置默认打印机"); } if (!Directory.Exists(printerData.filePath) && !File.Exists(printerData.filePath)) { return("要打印的数据不存在"); } using (var pdfDocument = PdfiumViewer.PdfDocument.Load(printerData.filePath)) { for (int?pages = 0; pages < pdfDocument.PageCount; pages++) { using (var image = pdfDocument.Render(pages.Value, ConfigDefine.Pdf2JpgResolution, ConfigDefine.Pdf2JpgResolution, PdfiumViewer.PdfRenderFlags.CorrectFromDpi)) { PrintDocument pd = new PrintDocument(); pd.PrinterSettings.PrinterName = printerData.printerName; pd.DefaultPageSettings.PrinterSettings.PrinterName = printerData.printerName; pd.DefaultPageSettings.PaperSize = getPaperSize(pd.PrinterSettings.PaperSizes, printerData.paperName) ?? pd.DefaultPageSettings.PaperSize; pd.PrintPage += (o, e) => { PageSettings settings = e.PageSettings; var paperHeight = settings.PaperSize.Height; var paperWidth = settings.PaperSize.Width; int margin = 10; var imgHeight = 0; var imgWidth = 0; ImageScaling(image, paperHeight, paperWidth, margin, printerData.direction, ref imgHeight, ref imgWidth); if (printerData.direction == "2") //2:横向打印(html转pdf的有问题,html转pdf不考虑宽度,转出来标准的pdf页,分页也已经完成,在这部分就处理不了) { e.Graphics.TranslateTransform(0, paperHeight); //旋转原点 e.Graphics.RotateTransform(-90.0F); //旋转角度 } e.Graphics.DrawImage(image, margin, margin, imgWidth, imgHeight); }; pd.Print(); } } } return("打印成功!"); } catch (Exception ex) { return("打印出错【" + ex.Message + "】"); } }
public static string DirectionByImageWH(PrinterData printerData) { if (printerData.direction == "0") { if (printerData.image.Width > printerData.image.Height) { return("2"); } else { return("1"); } } return(printerData.direction); }
public override int GetHashCode() { int hash = 1; if (printerData_ != null) { hash ^= PrinterData.GetHashCode(); } hash ^= profileCounters_.GetHashCode(); if (_unknownFields != null) { hash ^= _unknownFields.GetHashCode(); } return(hash); }
public static void PrintImagePage(PrinterData printerData) { var eventType = (printerData.eventType).ToUpper(); PrintDocument pd = new PrintDocument(); pd.PrinterSettings.PrinterName = printerData.printerName; pd.DefaultPageSettings.PrinterSettings.PrinterName = printerData.printerName; PrinterSettings.PaperSizeCollection paperSizes = pd.PrinterSettings.PaperSizes; //获取打印纸张 if (printerData.customSizeFlag) { PaperSize ps = new PaperSize("用户选择模版(" + printerData.width + "*" + printerData.height + ")", (int)Millimeters2PixelsUtils.Millimeters2Pixels(printerData.width), (int)Millimeters2PixelsUtils.Millimeters2Pixels(printerData.height)); pd.DefaultPageSettings.PaperSize = ps; } else { pd.DefaultPageSettings.PaperSize = getPaperSize(paperSizes, printerData.paperName) ?? pd.DefaultPageSettings.PaperSize; } pd.PrintPage += (o, e) => { PageSettings settings = e.PageSettings; var paperHeight = settings.PaperSize.Height; var paperWidth = settings.PaperSize.Width; //Rectangle m = e.MarginBounds; int margin = 10, imgHeight = 0, imgWidth = 0; ImageScaling(printerData.image, paperHeight, paperWidth, margin, printerData.direction, ref imgHeight, ref imgWidth); if (printerData.direction == "2") //2:横向打印(html转pdf的有问题,html转pdf不考虑宽度,转出来标准的pdf页,分页也已经完成,在这部分就处理不了) { e.Graphics.TranslateTransform(0, paperHeight); //旋转原点 e.Graphics.RotateTransform(-90.0F); //旋转角度 } e.Graphics.DrawImage(printerData.image, margin, margin, imgWidth, imgHeight); }; if (eventType == "PRINT") { pd.Print(); } else if (eventType == "PREVIEW") { PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog(); printPreviewDialog.WindowState = FormWindowState.Maximized; printPreviewDialog.Document = pd; printPreviewDialog.TopMost = true; printPreviewDialog.ShowDialog(); } (printerData.image).Dispose(); }
public void MergeFrom(HloExecutionProfileData other) { if (other == null) { return; } if (other.printerData_ != null) { if (printerData_ == null) { PrinterData = new global::Xla.HloProfilePrinterData(); } PrinterData.MergeFrom(other.PrinterData); } profileCounters_.Add(other.profileCounters_); _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); }
public static void Start() { Thread.CurrentThread.Name = "Главный поток"; CheckThread(Thread.CurrentThread); var clock_thread = new Thread(ClockThreadMethod); clock_thread.Name = "Фоновый поток"; clock_thread.Priority = ThreadPriority.BelowNormal; //clock_thread.IsBackground = true; clock_thread.Start(); var message = "Вечер в хату!!!"; //var printer1_thread = new Thread(new ParameterizedThreadStart(PrinterThread)); //var printer1_thread = new Thread(PrinterThread); //printer1_thread.Start(message); //var printer2_thread = new Thread(() => PrintherThread(message)); //printer2_thread.Start(); var printer_data = new PrinterData(message); var printer3_thread = new Thread(printer_data.Print); printer3_thread.Start(); Console.WriteLine("Главный поток завершился"); Console.ReadLine(); if (!clock_thread.Join(50)) { clock_thread.Interrupt(); } _ClockCanWork = false; //clock_thread.Abort(); }
/// <summary> /// 改变打印机的设置 /// 张刊 /// 2016年8月18日 /// [email protected] /// </summary> /// <param name="PrinterName">打印机名称,如果为空则使用默认打印机</param> /// <param name="PS">需要改变的信息</param> /// <returns>是否改变成功</returns> public static void ModifyPrintInfo1(string PrinterName, ref PrinterData PS) { if (PrinterName == string.Empty || PrinterName == null) { PrinterName = GetDeaultPrinterName(); } IntPtr hDC = CreateDC("WINSPOOL", PrinterName, null, ref dm); if (hDC != IntPtr.Zero) { 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; } ResetDC(hDC, ref dm); DeleteDC(hDC); } }
public static string PreViewPdf(PrinterData printerData) { try { if (string.IsNullOrEmpty(printerData.printerName)) { return("请先设置默认打印机"); } if (!Directory.Exists(printerData.filePath) && !File.Exists(printerData.filePath)) { return("要打印的数据不存在"); } using (var pdfDocument = PdfiumViewer.PdfDocument.Load(printerData.filePath)) { int? pages = 0; PrintDocument pd = new PrintDocument(); pd.PrinterSettings.PrinterName = printerData.printerName; pd.DefaultPageSettings.PrinterSettings.PrinterName = printerData.printerName; pd.DefaultPageSettings.PaperSize = getPaperSize(pd.PrinterSettings.PaperSizes, printerData.paperName) ?? pd.DefaultPageSettings.PaperSize; pd.PrintPage += (o, e) => { PreViewPage(o, e, pdfDocument, printerData.direction, printerData.customSizeFlag, printerData.width, printerData.height, ref pages); }; PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog(); printPreviewDialog.WindowState = FormWindowState.Maximized; printPreviewDialog.Document = pd; printPreviewDialog.TopMost = true; printPreviewDialog.ShowDialog(); //pd.IMCISPrintTool(); } return("打印成功!"); } catch (Exception ex) { return("打印出错【" + ex.Message + "】"); } }
/// <summary> /// 改变打印机的设置 /// 张刊 /// 2016年8月18日 /// [email protected] /// </summary> /// <param name="PrinterName">打印机名称,如果为空则使用默认打印机</param> /// <param name="PS">需要改变的信息</param> /// <returns>是否改变成功</returns> public static bool ModifyPrintInfo(string PrinterName, ref PrinterData PS) { 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(); } dm = GetPrinterDemode(PrinterName); //是否改变纸张类型 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; } if (PS.source != null) { dm.dmDefaultSource = (short)PS.source; dm.dmFields |= (int)PaperSource.DMBIN_UPPER; } Marshal.StructureToPtr(dm, yDevModeData, true); pinfo.pDevMode = yDevModeData; 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); //写入内存 lastError = Marshal.GetLastWin32Error(); nRet = Convert.ToInt16(SetPrinter(hPrinter, 2, ptrPrinterInfo, 0)); if (nRet == 0) { lastError = Marshal.GetLastWin32Error(); //Unable to set shared printer settings. //throw new Win32Exception(Marshal.GetLastWin32Error()); } if (hPrinter != IntPtr.Zero) { ClosePrinter(hPrinter); } return(Convert.ToBoolean(nRet)); } }
public string Print(string data) { String result = "打印成功!"; try { PrinterData printerData = JsonHelper.DeserializeJsonToObject <PrinterData>(data); string eventType = (printerData.eventType).ToUpper(); string printType = (printerData.printType).ToUpper(); string folderName = Guid.NewGuid().ToString(); //pdf转图片所存放的文件夹名称 string tempDir = Path.Combine(dfp.dynamicFilePath, "tempImg"); //生成图片临时存放文件夹 string tempImageDir = Path.Combine(tempDir, folderName); //string targetPath = Path.Combine(tempDir, fileName + ".jpg"); int width = printerData.width; int height = printerData.height; Boolean customSizeFlag = printerData.customSizeFlag; WebRequest webreq = null; WebResponse webres = null; Boolean isUrl = HttpUtils.IsUrl(Convert.ToString(printerData.data)); string fileType = printerData.fileType.ToUpper(); #region if (File.Exists(Convert.ToString(printerData.data))) //fileType由于IMCIS没有对应变量,data是路径文件名时取值为其后缀,否则当printType时“BASE64”也是JPG,否则就是HTML打印 { fileType = Path.GetExtension(Convert.ToString(printerData.data)).Substring(1).ToUpper(); } else if (isUrl) //网络文件,通过ContentType获取 { webreq = WebRequest.Create(Convert.ToString(printerData.data)); webres = webreq.GetResponse(); string[] contentType = Convert.ToString(webres.ContentType).Split('/'); fileType = contentType.Length > 1 ? contentType[1].ToUpper() : fileType; } else if (fileType != "PRINTERNAMES" && fileType != "PAGESIZES") { fileType = printType == "BASE64" ? "JPG" : "HTML"; } #endregion switch (fileType) { case "JPG": case "JPEG": case "PNG": case "RAW": case "BMP": if (isUrl) { using (Stream stream = webres.GetResponseStream()) { using (Image image = Image.FromStream(stream)) { printerData.image = image; result = PrintUtils.PrintImage(printerData); } } } else { if (printType == "FILEPATH") { printerData.filePath = printerData.data; } else if (printType == "BASE64") { printerData.imgBase64 = printerData.data; } result = PrintUtils.PrintImage(printerData); } break; case "TXT": PrintUtils.PrintTxt(printerData); break; #region pdf转图片打印 /* * case "PDF": * string fileName = Path.GetFileNameWithoutExtension(printerData.data); //通过完整路径取得pdf文件名称作为jpg的文件名 * if (isUrl) * { * using (Stream stream = webres.GetResponseStream()) * { * MemoryStream ms = HttpUtils.StreamToMemoryStream(stream); * Pdf2JpgUtils.Pdf2Jpg(ms, Path.Combine(tempDir, fileName + ".jpg"), null, folderName); * } * } * else * { * Pdf2JpgUtils.Pdf2Jpg(Convert.ToString(printerData.data), Path.Combine(tempDir, fileName + ".jpg"), null, folderName); * } * * if (eventType == "PRINT") * { * var files = Directory.GetFiles(tempImageDir).OrderBy(f => Convert.ToInt32(Path.GetFileNameWithoutExtension(f))); * foreach (var file in files) * { * printerData.filePath = file; * result = PrintUtils.PrintImage(printerData); * } * try * { * //删除文件夹 * Directory.Delete(tempImageDir, true); * } * catch (Exception ex) * { * result = string.Format("删除临时目录出错:{0};其他错误信息:{1}", tempImageDir, ex); * } * } * else if (eventType == "PREVIEW") * { * printerData.filePath = tempImageDir; * result = PrintUtils.PreView(printerData); * } * break; * case "HTML": * string tempPdf = Path.Combine(dfp.dynamicFilePath, "tempPdf"); * string tempPdfDir = Path.Combine(tempPdf, folderName); * Directory.CreateDirectory(tempPdfDir); * string tempPdfPath = Path.Combine(tempPdfDir, "Html2Pdf.pdf"); * Html2PdfUtils.Html2Pdf(Convert.ToString(printerData.data).Trim(), tempPdfPath, printerData.paperName, printerData.direction, customSizeFlag, width, height); * Pdf2JpgUtils.Pdf2Jpg(tempPdfPath, Path.Combine(tempDir, "Html2Pdf.jpg"), null, folderName); * if (eventType == "PRINT") * { * var files = Directory.GetFiles(tempImageDir).OrderBy(f => Convert.ToInt32(Path.GetFileNameWithoutExtension(f))); * foreach (var file in files) * { * printerData.filePath = file; * result = PrintUtils.PrintImage(printerData); * } * try * { * //删除临时文件夹 * Directory.Delete(tempImageDir, true); * Directory.Delete(tempPdfDir, true); * } * catch (Exception ex) * { * result = string.Format("删除临时目录出错:{0};其他错误信息:{1}", tempPdfDir, ex); * } * } * else if (eventType == "PREVIEW") * { * printerData.filePath = tempImageDir; * result = PrintUtils.PreView(printerData); * } * break; */ #endregion #region pdf不转图片直接打印 /* * */ case "PDF": if (isUrl) { using (Stream stream = webres.GetResponseStream()) { MemoryStream ms = HttpUtils.StreamToMemoryStream(stream); result = eventType == "PRINT" ? PrintUtils.PrintPdf(ms, printerData) : PrintUtils.PreViewPdf(ms, printerData); } } else { printerData.filePath = printerData.data; result = eventType == "PRINT" ? PrintUtils.PrintPdf(printerData) : PrintUtils.PreViewPdf(printerData); } break; case "HTML": using (Stream pdfStream = Html2PdfUtils.Html2Pdf(printerData)) { result = eventType == "PRINT" ? PrintUtils.PrintPdf(pdfStream, printerData) : PrintUtils.PreViewPdf(pdfStream, printerData); } break; #endregion case "PRINTERNAMES": result = PrintUtils.GetPrinterNames(); break; case "PAGESIZES": result = PrintUtils.GetPageSizesByName(Convert.ToString(printerData.data)); break; default: result = "参数异常:fileType字段只能为jpg、pdf、html、getPrinterName、getPageSizes"; break; } } catch (Exception ex) { result = "打印出错【" + ex.Message + "】"; } return(result); }
/// <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); } } }
/// <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); } }
public void addPrinter(string name) { ReciptPrinter = new PrinterData(name); }
/// <summary> /// Loads data. /// </summary> private void Load() { // try to load data from server if (!LoadRemote()) { // load data from local environment config file LoadLocal(); } LogHelper.LogDebug("ColorPageCost " + ColorPageCost.ToString()); LogHelper.LogDebug("BlackAndWhitePageCost " + BlackAndWhitePageCost.ToString()); if (BlackAndWhitePageCost <= 0) { BlackAndWhitePageCost = 1; } if (ColorPageCost <= 0) { ColorPageCost = 2; } // check data and save if ((UserPCs != null && UserPCs.Count > 0) && (Printers != null && Printers.Count > 0)) { Save(); } // check if (UserPCs == null || UserPCs.Count < 1) { UserPCs = new PCData() { new PCDataEntry { Name = "frontdesk1-pc", Margin = new Thickness(678, 18, 0, 0), MapPosition = MapPosition.Top }, new PCDataEntry { Name = "apiserver-pc", Margin = new Thickness(698, 18, 0, 0), MapPosition = MapPosition.Top }, new PCDataEntry { Name = "frontdesk2-pc", Margin = new Thickness(728, 18, 0, 0), MapPosition = MapPosition.Top }, new PCDataEntry { Name = "conference", Margin = new Thickness(66, 110, 0, 0), MapPosition = MapPosition.Top }, new PCDataEntry { Name = "backdesk-pc", Margin = new Thickness(90, 200, 0, 0), MapPosition = MapPosition.Side }, new PCDataEntry { Name = "printerleft-pc", Margin = new Thickness(760, 146, 0, 0), MapPosition = MapPosition.Top }, new PCDataEntry { Name = "printerright-pc", Margin = new Thickness(696, 146, 0, 0), MapPosition = MapPosition.Top }, new PCDataEntry { Name = "cubicle01-pc", Margin = new Thickness(628, 18, 0, 0), MapPosition = MapPosition.Top }, new PCDataEntry { Name = "cubicle02-pc", Margin = new Thickness(571, 18, 0, 0), MapPosition = MapPosition.Top }, new PCDataEntry { Name = "cubicle03-pc", Margin = new Thickness(514, 18, 0, 0), MapPosition = MapPosition.Top }, new PCDataEntry { Name = "cubicle04-pc", Margin = new Thickness(457, 18, 0, 0), MapPosition = MapPosition.Top }, new PCDataEntry { Name = "cubicle05-pc", Margin = new Thickness(400, 18, 0, 0), MapPosition = MapPosition.Top }, new PCDataEntry { Name = "cubicle06-pc", Margin = new Thickness(343, 18, 0, 0), MapPosition = MapPosition.Top }, new PCDataEntry { Name = "cubicle07-pc", Margin = new Thickness(286, 18, 0, 0), MapPosition = MapPosition.Top }, new PCDataEntry { Name = "cubicle08-pc", Margin = new Thickness(229, 18, 0, 0), MapPosition = MapPosition.Top }, new PCDataEntry { Name = "cubicle09-pc", Margin = new Thickness(172, 18, 0, 0), MapPosition = MapPosition.Top }, new PCDataEntry { Name = "cubicle10-pc", Margin = new Thickness(576, 172, 0, 0), MapPosition = MapPosition.Side }, new PCDataEntry { Name = "cubicle11-pc", Margin = new Thickness(526, 172, 0, 0), MapPosition = MapPosition.Side }, new PCDataEntry { Name = "cubicle12-pc", Margin = new Thickness(470, 172, 0, 0), MapPosition = MapPosition.Side }, new PCDataEntry { Name = "cubicle13-pc", Margin = new Thickness(418, 172, 0, 0), MapPosition = MapPosition.Side }, new PCDataEntry { Name = "cubicle14-pc", Margin = new Thickness(366, 172, 0, 0), MapPosition = MapPosition.Side }, new PCDataEntry { Name = "cubicle15-pc", Margin = new Thickness(314, 172, 0, 0), MapPosition = MapPosition.Side }, new PCDataEntry { Name = "cubicle16-pc", Margin = new Thickness(272, 172, 0, 0), MapPosition = MapPosition.Side }, new PCDataEntry { Name = "cubicle17-pc", Margin = new Thickness(210, 172, 0, 0), MapPosition = MapPosition.Side }, new PCDataEntry { Name = "cubicle18-pc", Margin = new Thickness(158, 172, 0, 0), MapPosition = MapPosition.Side }, new PCDataEntry { Name = "cubicle19-pc", Margin = new Thickness(176, 318, 0, 0), MapPosition = MapPosition.Bottom }, new PCDataEntry { Name = "cubicle20-pc", Margin = new Thickness(232, 318, 0, 0), MapPosition = MapPosition.Bottom }, new PCDataEntry { Name = "cubicle21-pc", Margin = new Thickness(288, 318, 0, 0), MapPosition = MapPosition.Bottom }, new PCDataEntry { Name = "cubicle22-pc", Margin = new Thickness(344, 318, 0, 0), MapPosition = MapPosition.Bottom }, new PCDataEntry { Name = "cubicle23-pc", Margin = new Thickness(400, 318, 0, 0), MapPosition = MapPosition.Bottom }, }; } // check valid printer destinations if (Printers == null || Printers.Count < 1) { // load defaults Printers = new PrinterData() { new PrinterDataEntry() { Name = "backprinter", InternalName = "backprinter", MarginGlow = new Thickness(207.5, 226, 0, 0), MarginLabel = new Thickness(141, 245, 0, 0), ExcludedPCNames = new List <string>() { "backdesk-pc", "frontdesk1-pc", "frontdesk2-pc", "apiserver-pc" } }, // COLOR PRINTER $.75 CENTS PER PAGE new PrinterDataEntry() { Name = "COLOR PRINTER $.75 CENTS PER PAGE", InternalName = "colorprinter", MarginGlow = new Thickness(761, 190, 0, 0), MarginLabel = new Thickness(695, 212, 0, 0), ExcludedPCNames = new List <string>() { "printerleft-pc", "printerright-pc", "frontdesk1-pc", "frontdesk2-pc", "apiserver-pc" } }, // BLACK & WHITE $.25 CENTS PER PAGE new PrinterDataEntry() { Name = "BLACK & WHITE $.25 CENTS PER PAGE", InternalName = "black-whiteprinter", MarginGlow = new Thickness(787.5, 190, 0, 0), MarginLabel = new Thickness(720, 212, 0, 0), ExcludedPCNames = new List <string>() { "printerleft-pc", "printerright-pc", "frontdesk1-pc", "frontdesk2-pc", "apiserver-pc" } }, new PrinterDataEntry() { Name = "cubicle01_printer", InternalName = "cubicle01_printer", MarginGlow = new Thickness(685, 68.5, 0, 0), MarginLabel = new Thickness(618, 92, 0, 0), DoNotShowFootsteps = true }, new PrinterDataEntry() { Name = "cubicle02_printer", InternalName = "cubicle02_printer", MarginGlow = new Thickness(629.5, 68.5, 0, 0), MarginLabel = new Thickness(563, 92, 0, 0), DoNotShowFootsteps = true }, new PrinterDataEntry() { Name = "cubicle05_printer", InternalName = "cubicle05_printer", MarginGlow = new Thickness(464.5, 69, 0, 0), MarginLabel = new Thickness(398, 92, 0, 0), DoNotShowFootsteps = true }, }; } /* * LogHelper.Log("Environment Data Printers"); * foreach (var item in Printers) * LogHelper.Log(item.ToString()); * * LogHelper.Log("Environment Data UserPCs"); * foreach (var item in UserPCs) * LogHelper.Log(item.ToString());*/ //Save(); }
public static Stream Html2Pdf(PrinterData printerData) { string htmlText = printerData.data.Trim(); if (string.IsNullOrEmpty(htmlText)) { throw new Exception("传入的html无内容:" + htmlText); } MemoryStream outputStream = new MemoryStream(); //实例化MemoryStream,用于存PDF byte[] data = Encoding.UTF8.GetBytes(htmlText); //字串转成byte[] MemoryStream msInput = new MemoryStream(data); int width = 0, height = 0; width = (int)Millimeters2PixelsUtils.Millimeters2Pixels(printerData.width); height = (int)Millimeters2PixelsUtils.Millimeters2Pixels(printerData.height); if (!printerData.customSizeFlag) { PrintUtils.getPaperSize(printerData.paperName ?? "A4", ref width, ref height); } Rectangle pageSize = new Rectangle(width, height); //设置pdf模板大小 if (printerData.direction == "2") //2:横向打印 { pageSize = new Rectangle(height, width); } Document doc = new Document(pageSize); //要写PDF的文件 document = new Document(PageSize.A4, 25, 25, 30, 30); PdfWriter writer = PdfWriter.GetInstance(doc, outputStream); //指定文件预设开档时的缩放为100% PdfDestination pdfDest = new PdfDestination(PdfDestination.XYZ, 0, doc.PageSize.Height, 1f); //开启Document文件 doc.Open(); //使用XMLWorkerHelper把Html parse到PDF档里 XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, msInput, null, Encoding.UTF8, new UnicodeFontFactory()); //XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, msInput, null, Encoding.UTF8); //将pdfDest设定的资料写到PDF档 PdfAction action = PdfAction.GotoLocalPage(1, pdfDest, writer); writer.SetOpenAction(action); doc.Close(); msInput.Close(); outputStream.Close(); //回传PDF档案 var bytes = outputStream.ToArray(); var ret = Convert.ToBase64String(bytes); try { string strbase64 = ret; strbase64 = strbase64.Replace(' ', '+'); return(new MemoryStream(Convert.FromBase64String(strbase64))); } catch (Exception ex) { throw new Exception("html转pdf文件失败:" + ex.Message); } }
public static string PreView(PrinterData printerData) { try { if (string.IsNullOrEmpty(printerData.printerName)) { return("请先设置默认打印机"); } var eventType = (printerData.eventType).ToUpper(); var filePath = printerData.filePath; if (!Directory.Exists(filePath) && !File.Exists(filePath)) { return("要打印的数据不存在"); } PrintDocument pd = new PrintDocument(); pd.PrinterSettings.PrinterName = printerData.printerName; pd.DefaultPageSettings.PrinterSettings.PrinterName = printerData.printerName; if (printerData.customSizeFlag) { PaperSize ps = new PaperSize("用户选择模版(" + printerData.width + "*" + printerData.height + ")", (int)Millimeters2PixelsUtils.Millimeters2Pixels(printerData.width), (int)Millimeters2PixelsUtils.Millimeters2Pixels(printerData.height)); pd.DefaultPageSettings.PaperSize = ps; } else { pd.DefaultPageSettings.PaperSize = getPaperSize(pd.PrinterSettings.PaperSizes, printerData.paperName) ?? pd.DefaultPageSettings.PaperSize; } var fileListIndex = 0; List <string> fileList = new List <string>(); if (File.Exists(filePath)) //路径是jpg图片 { fileList.Add(filePath); } else { fileList = new List <string>(Directory.GetFiles(filePath).OrderBy(f => Convert.ToInt32(Path.GetFileNameWithoutExtension(f)))); } if (fileList.Count == 0) { return("要打印的数据不存在"); } pd.PrintPage += (o, e) => { PageSettings settings = e.PageSettings; var paperHeight = settings.PaperSize.Height; var paperWidth = settings.PaperSize.Width; int margin = 10, imgHeight = 0, imgWidth = 0; using (Image image = new Bitmap(fileList[fileListIndex])) { ImageScaling(image, paperHeight, paperWidth, margin, printerData.direction, ref imgHeight, ref imgWidth); if (printerData.direction == "2") //2:横向打印(html转pdf的有问题,html转pdf不考虑宽度,转出来标准的pdf页,分页也已经完成,在这部分就处理不了) { e.Graphics.TranslateTransform(0, paperHeight); //旋转原点 e.Graphics.RotateTransform(-90.0F); //旋转角度 } e.Graphics.DrawImage(image, margin, margin, imgWidth, imgHeight); } if (fileListIndex < fileList.Count - 1) { e.HasMorePages = true; //HaeMorePages属性为True时,PrintPage的回调函数就会被再次调用,打印一个页面。 fileListIndex++; } else { //预览界面点击打印需要把索引重新初始化 fileListIndex = 0; } }; //打印结束-删除一些创建的文件 //pd.EndPrint += new PrintEventHandler(); if (eventType == "PRINT") { pd.Print(); } else if (eventType == "PREVIEW") { PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog(); printPreviewDialog.WindowState = FormWindowState.Maximized; printPreviewDialog.Document = pd; printPreviewDialog.TopMost = true; printPreviewDialog.ShowDialog(); } deleteTemFile(); return("打印成功!"); } catch (Exception e) { return(e.Message); } }