亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#.NET實(shí)現(xiàn)Web端頁(yè)面無(wú)預(yù)覽打印插件

admin
2023年5月15日 9:39 本文熱度 1674

前言


最近,客戶(hù)有個(gè)需求過(guò)來(lái),Web端無(wú)預(yù)覽打印,美其名曰:快捷打印。


當(dāng)時(shí)第一反應(yīng)就是找插件,拿來(lái)主義永遠(yuǎn)不過(guò)時(shí)。找了一圈發(fā)現(xiàn),免費(fèi)的有限制,沒(méi)限制的需要收費(fèi)(LODOP真的好用)。


說(shuō)來(lái)就是一個(gè)簡(jiǎn)單的無(wú)預(yù)覽打印,收費(fèi)的諸多功能都無(wú)用武之地,總的來(lái)說(shuō)性?xún)r(jià)比很低,所以就打算自己琢磨著寫(xiě)一個(gè)算了。剛開(kāi)始總是糾結(jié)在Web端去實(shí)現(xiàn)直接打印,打印是實(shí)現(xiàn)了,結(jié)果是服務(wù)端的,客戶(hù)端只能一臉懵。


后來(lái)(準(zhǔn)備妥協(xié)了),安裝了一些收費(fèi)的插件發(fā)現(xiàn),都需要先安裝一個(gè)客戶(hù)端程序,靈光乍現(xiàn),解決方案這不就出來(lái)了。


思路:Web端調(diào)用客戶(hù)端程序,讓客戶(hù)端程序去實(shí)現(xiàn)打印。


實(shí)現(xiàn):Web端通過(guò)WebSocket將Html發(fā)送給客戶(hù)端,客戶(hù)端(Winform)監(jiān)聽(tīng)消息,接收處理后再打印。


客戶(hù)端(Winform)打印實(shí)現(xiàn)方式:


1、Html轉(zhuǎn)PDF,然后打印PDF(暫時(shí)需要用到三方包)


2、Html轉(zhuǎn)圖片,然后通過(guò)PrintDocument打印圖片


3、通過(guò)WebBrowser實(shí)現(xiàn)打印


按照上面的思路再去寫(xiě)代碼,就會(huì)簡(jiǎn)單很多。


Web端的代碼就不多說(shuō)了,一個(gè)簡(jiǎn)單的WebSocket通信。


客戶(hù)端程序(Winform)


1、監(jiān)聽(tīng)Web端的WebSocket消息


這里有用到三方包:Fleck,開(kāi)箱即用,非常方便。

 1         /// <summary>
 2         /// ConnAndListen
 3         /// </summary>
 4         public static void ConnAndListen()
 5
         { 7             // 監(jiān)聽(tīng)本地 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                     // 關(guān)閉連接
19                     socket.Send("socket通訊已關(guān)閉連接");
20                     socket.Close();
21                 };
22                 socket.OnMessage = message =>
23                 {
24                     // TODO...
25                 };
26             });
27         }

2、處理Html,將Html轉(zhuǎn)換為圖片

 1         /// <summary>
 2         /// GetBitmap
 3         /// </summary>
 4         /// <returns></returns>
 5         public Bitmap GetBitmap()
 6         {
 7             WebPageBitmap Shot = new WebPageBitmap("html""頁(yè)面寬度""頁(yè)面高度");
 8             Shot.GetIt();
 9             Bitmap Pic = Shot.DrawBitmap("圖片高度""圖片寬度");
10             // 設(shè)置圖片分辨率
11             Pic.SetResolution(203.0F, 203.0F);
12             return Pic;
13         }   

3、打印圖片

  1     /// <summary>
  2     /// 圖片打印
  3     /// </summary>
  4     public class PrintDirectClass
  5     {
  6         private PaperSize paperSize = null;
  7         // 多頁(yè)打印
  8         private int printNum = 0;
  9         // 單個(gè)圖片文件
 10         private string imageFile = ".....";
 11         // 多個(gè)圖片文件
 12         private ArrayList imageList = new ArrayList();
 13 
 14         /// <summary>
 15         /// 打印預(yù)覽
 16         /// </summary>
 17         public void PrintPreview()
 18
         {
 19             // 打印機(jī)對(duì)象
 20             PrintDocument imgToPrint = new PrintDocument();
 21 
 22             #region 打印機(jī)相關(guān)設(shè)置
 23             var pageSize = imgToPrint.PrinterSettings.PaperSizes;
 24             paperSize = pageSize[pageSize.Count - 1];
 25 
 26             // 打印方向設(shè)置
 27             //imgToPrint.DefaultPageSettings.Landscape = false;
 28             // 打印紙張大小設(shè)置
 29             //imgToPrint.DefaultPageSettings.PaperSize = paperSize;
 30             // 打印分辨率設(shè)置
 31             //imgToPrint.DefaultPageSettings.PrinterResolution.Kind = PrinterResolutionKind.High;
 32             // 打印邊距設(shè)置
 33             //imgToPrint.DefaultPageSettings.Margins = new Margins(40, 40, 40, 40);
 34 
 35             // 打印開(kāi)始事件
 36             imgToPrint.BeginPrint += new PrintEventHandler(this.imgToPrint_BeginPrint);
 37             // 打印結(jié)束事件
 38             imgToPrint.EndPrint += new PrintEventHandler(this.imgToPrint_EndPrint);
 39             // 打印內(nèi)容設(shè)置
 40             imgToPrint.PrintPage += new PrintPageEventHandler(this.imgToPrint_PrintPage);
 41             #endregion
 42 
 43             // 直接打印
 44             //imgToPrint.Print();
 45 
 46             // 打印彈框確認(rèn)
 47             //PrintDialog printDialog = new PrintDialog();
 48             //printDialog.AllowSomePages = true;
 49             //printDialog.ShowHelp = true;
 50             //printDialog.Document = imgToPrint;
 51             //if (printDialog.ShowDialog() == DialogResult.OK)
 52             //{
 53             //    imgToPrint.Print();
 54             //}
 55 
 56             // 預(yù)覽打印
 57             //PrintPreviewDialog pvDialog = new PrintPreviewDialog();
 58             //pvDialog.Document = imgToPrint;
 59             //pvDialog.ShowDialog();
 60         }
 61 
 62         /// <summary>
 63         /// 打印開(kāi)始事件
 64         /// </summary>
 65         /// <param name="sender"></param>
 66         /// <param name="e"></param>
 67         private void imgToPrint_BeginPrint(object sender, PrintEventArgs e)
 68
         {
 69             if (imageList.Count == 0)
 70                 imageList.Add(imageFile);
 71         }
 72 
 73         /// <summary>
 74         /// 打印結(jié)束事件
 75         /// </summary>
 76         /// <param name="sender"></param>
 77         /// <param name="e"></param>
 78         private void imgToPrint_EndPrint(object sender, PrintEventArgs e)
 79
         {
 80 
 81         }
 82 
 83         /// <summary>
 84         /// 設(shè)置打印內(nèi)容
 85         /// </summary>
 86         /// <param name="sender"></param>
 87         /// <param name="e"></param>
 88         private void imgToPrint_PrintPage(object sender, PrintPageEventArgs e)
 89
         {
 90             // 圖片文本質(zhì)量
 91             e.Graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
 92             // 圖片插值質(zhì)量
 93             e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
 94             // 圖片合成質(zhì)量
 95             e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
 96             // 圖片抗鋸齒
 97             e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
 98             // 設(shè)置縮放比例
 99             e.Graphics.PageScale = 0.3F;
100             using (Stream fs = new FileStream(imageList[printNum].ToString().Trim(), FileMode.Open, FileAccess.Read))
101             {
102                 System.Drawing.Image image = System.Drawing.Image.fromStream(fs);
103                 int w = image.Width;
104                 int h = image.Height;
105                 // 繪制Image
106                 e.Graphics.DrawImage(image, 4040410600);
107                 if (printNum < imageList.Count - 1)
108                 {
109                     printNum++;
110                     // HasMorePages為true則再次運(yùn)行PrintPage事件
111                     e.HasMorePages = true;
112                     return;
113                 }
114                 e.HasMorePages = false;
115             }
116             // 設(shè)置打印內(nèi)容的邊距
117             //e.PageSettings.Margins = new Margins(40, 40, 40, 40);
118             // 設(shè)置是否橫向打印
119             e.PageSettings.Landscape = false;
120             // 設(shè)置紙張大小
121             e.PageSettings.PaperSize = paperSize;
122             // 設(shè)置打印分辨率
123             e.PageSettings.PrinterResolution.Kind = PrinterResolutionKind.High;
124         }
125     }

以上就是 Html轉(zhuǎn)圖片,然后通過(guò)PrintDocument打印圖片 的實(shí)現(xiàn)代碼了。其它兩種方式大家有興趣可以去試試。

WebBrowser 比較簡(jiǎn)單,但是對(duì)打印機(jī)控制不是特別友好(也可能是我沒(méi)有發(fā)現(xiàn),研究不深)

WebBrowser wb = new WebBrowser();
// 直接打印
wb.Print();
// 確認(rèn)打印
wb.ShowPrintDialog();
// 預(yù)覽打印
wb.ShowPrintPreviewDialog();

Html轉(zhuǎn)PDF,然后打印PDF原理于Html轉(zhuǎn)圖片,然后通過(guò)PrintDocument打印圖片一樣,不同的是轉(zhuǎn)PDF可能需要用到第三方的包,目前這方便的包還是比較齊全的,NUGET搜索pdf幾乎全是。


該文章在 2023/5/15 9:39:53 編輯過(guò)
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶(hù)的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved