1 /// <summary> 2 /// ConnAndListen 3 /// </summary> 4 public static void ConnAndListen() 5 { // 监听本地 45000端口 8 var server = new WebSocketServer($"ws://127.0.0.1:45000"); 9 server.Start(socket => 10 { 11 socket.OnOpen = () => 12 { 13 // 连接成功 14 socket.Send("socket通讯已连接"); 15 }; 16 socket.OnClose = () => 17 { 18 // 关闭连接 19 socket.Send("socket通讯已关闭连接"); 20 socket.Close(); 21 }; 22 socket.OnMessage = message => 23 { 24 // TODO... 25 }; 26 }); 27 }2、处理Html,将Html转换为图片
/// GetBitmap /// </summary> /// <returns></returns> public Bitmap GetBitmap() { WebPageBitmap Shot = new WebPageBitmap("html", "页面宽度", "页面高度"); Shot.GetIt(); Bitmap Pic = Shot.DrawBitmap("图片高度", "图片宽度"); // 设置图片分辨率 Pic.SetResolution(203.0 F, 203.0 F); return Pic; } 3、 打印图片 /// <summary> /// 图片打印 /// </summary> public class PrintDirectClass { private PaperSize paperSize = null; // 多页打印 private int printNum = 0; // 单个图片文件 private string imageFile = "....."; // 多个图片文件 private ArrayList imageList = new ArrayList(); /// <summary> /// 打印预览 /// </summary> public void PrintPreview() { // 打印机对象 PrintDocument imgToPrint = new PrintDocument(); # region 打印机相关设置 var pageSize = imgToPrint.PrinterSettings.PaperSizes; paperSize = pageSize[pageSize.Count - 1]; // 打印方向设置 //imgToPrint.DefaultPageSettings.Landscape = false; // 打印纸张大小设置 //imgToPrint.DefaultPageSettings.PaperSize = paperSize; // 打印分辨率设置 //imgToPrint.DefaultPageSettings.PrinterResolution.Kind = PrinterResolutionKind.High; // 打印边距设置 //imgToPrint.DefaultPageSettings.Margins = new Margins(40, 40, 40, 40); // 打印开始事件 imgToPrint.BeginPrint += new PrintEventHandler(this.imgToPrint_BeginPrint); // 打印结束事件 imgToPrint.EndPrint += new PrintEventHandler(this.imgToPrint_EndPrint); // 打印内容设置 imgToPrint.PrintPage += new PrintPageEventHandler(this.imgToPrint_PrintPage);# endregion // 直接打印 //imgToPrint.Print(); // 打印弹框确认 //PrintDialog printDialog = new PrintDialog(); //printDialog.AllowSomePages = true; //printDialog.ShowHelp = true; //printDialog.Document = imgToPrint; //if (printDialog.ShowDialog() == DialogResult.OK) //{ // imgToPrint.Print(); //} // 预览打印 //PrintPreviewDialog pvDialog = new PrintPreviewDialog(); //pvDialog.Document = imgToPrint; //pvDialog.ShowDialog(); } /// <summary> /// 打印开始事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void imgToPrint_BeginPrint(object sender, PrintEventArgs e) { if (imageList.Count == 0) imageList.Add(imageFile); } /// <summary> /// 打印结束事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void imgToPrint_EndPrint(object sender, PrintEventArgs e) { } /// <summary> /// 设置打印内容 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void imgToPrint_PrintPage(object sender, PrintPageEventArgs e) { // 图片文本质量 e.Graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit; // 图片插值质量 e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; // 图片合成质量 e.Graphics.CompositingQuality = CompositingQuality.HighQuality; // 图片抗锯齿 e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; // 设置缩放比例 e.Graphics.PageScale = 0.3 F; using(Stream fs = new FileStream(imageList[printNum].ToString().Trim(), FileMode.Open, FileAccess.Read)) { System.Drawing.Image image = System.Drawing.Image.FromStream(fs); int w = image.Width; int h = image.Height; // 绘制Image e.Graphics.DrawImage(image, 40, 40, 410, 600); if (printNum < imageList.Count - 1) { printNum++; // HasMorePages为true则再次运行PrintPage事件 e.HasMorePages = true; return; } e.HasMorePages = false; } // 设置打印内容的边距 //e.PageSettings.Margins = new Margins(40, 40, 40, 40); // 设置是否横向打印 e.PageSettings.Landscape = false; // 设置纸张大小 e.PageSettings.PaperSize = paperSize; // 设置打印分辨率 e.PageSettings.PrinterResolution.Kind = PrinterResolutionKind.High; } }
以上就是 Html转图片,然后通过PrintDocument打印图片 的实现代码了。其它两种方式大家有兴趣可以去试试。
WebBrowser 比较简单,但是对打印机控制不是特别友好(也可能是我没有发现,研究不深)WebBrowser wb = new WebBrowser(); // 直接打印 wb.Print(); // 确认打印 wb.ShowPrintDialog(); // 预览打印 wb.ShowPrintPreviewDialog();Html转PDF,然后打印PDF原理于Html转图片,然后通过PrintDocument打印图片一样,不同的是转PDF可能需要用到第三方的包,目前这方便的包还是比较齐全的,NUGET搜索pdf几乎全是。