闽公网安备 35020302035485号
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几乎全是。