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