RDIFramework.NET ━ Web中打印的各種方案參考-歡迎補充
做Web開發的同志應該都深有體會,在web程序中打印不再象應用程序中那樣便於控制了,web程序天生的一些特性造成了這個缺點,如:打印機在本地,而文件確可能在服務器上;格式如何控制和定制等等,都給我們開發中帶來了很多問題,當然有了問題就會有人來研究解決,這里我先對目前流行的幾種方式做個簡單介紹:
一、IE直接打印
這個不用多說,直接調用window.print或者webrower控件的ExecWB方法來打印。方便快捷,客戶端無需任何設置即可。利用一些辦法也可以實現簡單的定制,比如做一個模板htm文件,然后在js中動態創建一個隱藏幀來,用腳本來生成其中的數據,再把最后的結果文件寫入到隱藏幀打印處理。如果處理的好,實際上效果也是不錯,對於簡單的打印需求應該是夠了。比如下面的這個實現,我們要打印待辦任務,如下圖所示:
用戶單擊打印按鈕,即可彈出打印效果,如下圖所示:
實現上面的效果非常的簡單,這對簡單的要求不高的打印非常有用。實現方式如下,首先我們需要設置一個我們要打印的范圍,如下面代碼:
<!--startprint--> <table id="list"></table> <!--endprint-->
上面的Id=List是我們數據展示的區域,這樣用戶單擊時就可以打印這個范圍內的數據,打印代碼如下:
$('#btnPrint').click( function preview() { var bdhtml = window.document.body.innerHTML; var sprnstr = "<!--startprint-->"; var eprnstr = "<!--endprint-->"; var prnhtml = bdhtml.substr(bdhtml.indexOf(sprnstr) + 17); prnhtml = prnhtml.substring(0, prnhtml.indexOf(eprnstr)); window.document.body.innerHTML = prnhtml; window.print(); window.history.go(0); });
二、使用水晶報表做打印支持
水晶報表我相信做.NET開發的朋友都有聽過,水晶報表有很多優點,比如:快速的報表開發、能夠導出成為復雜的交互性圖表 、可以與其它控件一起在WebForm中使用 、能夠動態地將報表導出成為.pdf,.doc,xls,html,rtf等多種格式。如何制作水晶報表網上有很多現成的文章可以供參考,這兒就不介紹了。下面我們用水晶報表來做打印的實現。效果圖如下,我們要打印產品管理的數據,如下圖所示:
我們單擊打印,即可打印產品管理報表,如下圖所示:
代碼非常的簡單,先要制作好水晶報表(報表的數據源可以為DataTable,也可以是實體),如何制作可以參考相關的文章,網上很多。制作好后,新建一個WebForm頁面,將CrystalReportViewer添加到頁面中,再指定其對應的報表即可,再加上下面這段代碼,一個簡單的報表就完成了。
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { DataTable dtReportData = new DataTable("dsProductInfo"); IDbProvider dbProvider = DbFactoryProvider.GetProvider(SystemInfo.RDIFrameworkDbConection); dtReportData =dbProvider.Fill("SELECT TOP 100 PRODUCTCODE,PRODUCTNAME,PRODUCTMODEL,PRODUCTSTANDARD,PRODUCTUNIT,PRODUCTPRICE,PRODUCTDESCRIPTION FROM " +CASE_PRODUCTINFOTable.TableName); ReportDataSource rds = new ReportDataSource("dtCaseProductInfo", dtReportData); ReportViewer1.LocalReport.DataSources.Clear(); ReportViewer1.LocalReport.DataSources.Add(rds); ReportViewer1.LocalReport.Refresh(); } }
三、使用jqprint進行打印
jqprint,一個通過單擊頁面按鈕,便實現頁面打印的jQuery插件jqprint。jqprint的使用方法非常的簡單,但比我們介紹的方法一更好用一些,更專業一些。要使用jqprint,首先要引用相應的js文件。
<script language="javascript" src="jquery-1.4.4.min.js"></script> <script language="javascript" src="jquery.jqprint-0.3.js"></script>
比如,我們要打印如下html的內容:
<div id="ddd"> <table> <tr> <td>test</td> <td>test</td> <td>test</td> <td>test</td> <td>test</td> </tr> </table> </div>
只需調用這行代碼即可實現:
$("#ddd").jqprint();
如果需要使用jqprint,可以在這兒下載,點擊下載。
下面我們打印一個復雜一點的,打印角色列表,效果果如下所示:
單擊打印按鈕,打印效果如下圖所示:
四、其他方法
1、我們可以使用導出Excel或PDF等方式來進行打印。
2、使用商業打印控件進行打印,如Grid++ Report控件。
3、lodop打印控件。
4、本文只是拋磚引玉的作用,歡迎大家補充。