項目前景 由於之前的列印是客戶端程式,也就是winform做的,現在需要改版成網頁版,其他功能都能夠很好的實現,就是在列印上遇到一些難點。由於第一次做列印功能,剛開始照搬winform中調用word文檔實現列印,在本地運行時都很正常,可是發佈到IIS之後,怎麼也實現不了,經過研究學習,發現客戶端不可 ...
項目前景
由於之前的列印是客戶端程式,也就是winform做的,現在需要改版成網頁版,其他功能都能夠很好的實現,就是在列印上遇到一些難點。由於第一次做列印功能,剛開始照搬winform中調用word文檔實現列印,在本地運行時都很正常,可是發佈到IIS之後,怎麼也實現不了,經過研究學習,發現客戶端不可能調用伺服器的文件保存,最後經過一些學習研究,找到了web版列印的兩種方法。
解決方案
1、頁面拼寫html,使用window.print()方法列印
這是用的最多的一種方法,先在頁面上使用html將需要列印的模板拼寫出來,然後在需要添加數據的地方動態添加數據(innerText),然後調用列印局部頁面的方法printdiv()進行列印,方法如下:
function printdiv(printpage) { var headstr = "<html><head></title></head><body>"; var footstr = "</body>"; var newstr = document.getElementById(printpage).innerHTML; var oldstr = document.body.innerHTML; document.body.innerHTML = headstr+newstr+footstr; window.print(); document.body.innerHTML = oldstr; }
此種列印出來頁眉頁腳上會顯示網站title以及網址等信息,需要在更多設置中去掉頁眉頁腳的勾選(Google瀏覽器)
2、將列印模板保存為圖片,然後在圖片指定位置添加數據,最後將圖片列印出來
這種方法需要用到圖片處理類,先根據圖片(列印模板)的存儲路徑創建相應對象,使用Graphics封裝繪圖圖面
ms = new MemoryStream(); System.Drawing.Image myImage = System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath(path)); map = new Bitmap(myImage); myImage.Dispose(); graphics = Graphics.FromImage(map); graphics.InterpolationMode = InterpolationMode.HighQualityBilinear;
然後再調用繪製方法,就可以在指定位置繪製所需要的文本內容
public void DrawText(float pointX, float pointY, string text, Color color, string fontfamily = "仿宋", float fontsize = 14) { SolidBrush brush = new SolidBrush(color); PointF p = new PointF(pointX, pointY); using (Font font = new Font(fontfamily, fontsize)) { graphics.DrawString(text, font, brush, p); } }
傳入的參數依次是:X坐標、Y坐標、文本內容、字體顏色、字體格式、字體大小,還可以將繪製好的圖片保存到指定路徑
System.Drawing.Image img = System.Drawing.Image.FromStream(factory.Memory);
img.Save(savePath, System.Drawing.Imaging.ImageFormat.Png);
圖片繪製好了,接下來就是如何將圖片列印出來了,可以將繪製的圖片保存至伺服器應用程式的某個文件夾中,然後在頁面上添加該圖片
<div id="test"> <img src="../images/print.png" alt=""> </div>
再調用1中的方法printdiv("test")即可完成圖片列印。。。