項目前景
由於之前的打印是客戶端程序,也就是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")即可完成圖片打印。。。