天天看點

DIFramework.NET ━ Web中列印的各種方案參考-歡迎補充

  RDIFramework.NET ━ Web中列印的各種方案參考-歡迎補充

  

  做Web開發的同志應該都深有體會,在web程式中列印不再象應用程式中那樣便于控制了,web程式天生的一些特性造成了這個缺點,如:列印機在本地,而檔案确可能在伺服器上;格式如何控制和定制等等,都給我們開發中帶來了很多問題,當然有了問題就會有人來研究解決,這裡我先對目前流行的幾種方式做個簡單介紹:

  這個不用多說,直接調用window.print或者webrower控件的ExecWB方法來列印。友善快捷,用戶端無需任何設定即可。利用一些辦法也可以實作簡單的定制,比如做一個模闆htm檔案,然後在js中動态建立一個隐藏幀來,用腳本來生成其中的資料,再把最後的結果檔案寫入到隐藏幀列印處理。如果處理的好,實際上效果也是不錯,對于簡單的列印需求應該是夠了。比如下面的這個實作,我們要列印待辦任務,如下圖所示:

DIFramework.NET ━ Web中列印的各種方案參考-歡迎補充

  使用者單擊列印按鈕,即可彈出列印效果,如下圖所示:

DIFramework.NET ━ Web中列印的各種方案參考-歡迎補充

  實作上面的效果非常的簡單,這對簡單的要求不高的列印非常有用。實作方式如下,首先我們需要設定一個我們要列印的範圍,如下面代碼: 

1

2

3

<code> </code><code>&lt;!--startprint--&gt;</code> 

<code> </code><code>&lt;</code><code>table</code> <code>id</code><code>=</code><code>"list"</code><code>&gt;&lt;/</code><code>table</code><code>&gt;    </code>

<code> </code><code>&lt;!--endprint--&gt;</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>"&lt;!--startprint--&gt;"</code><code>;</code>

<code>           </code><code>var</code> <code>eprnstr = </code><code>"&lt;!--endprint--&gt;"</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等多種格式。如何制作水晶報表網上有很多現成的文章可以供參考,這兒就不介紹了。下面我們用水晶報表來做列印的實作。效果圖如下,我們要列印産品管理的資料,如下圖所示:

DIFramework.NET ━ Web中列印的各種方案參考-歡迎補充

  我們單擊列印,即可列印産品管理報表,如下圖所示: 

DIFramework.NET ━ Web中列印的各種方案參考-歡迎補充

  代碼非常的簡單,先要制作好水晶報表(報表的資料源可以為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>&lt;</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>&gt;&lt;/</code><code>script</code><code>&gt;</code>

<code>&lt;</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>&gt;&lt;/</code><code>script</code><code>&gt;</code>

    比如,我們要列印如下html的内容:

<code>&lt;</code><code>div</code> <code>id</code><code>=</code><code>"ddd"</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>table</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>tr</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>td</code><code>&gt;test&lt;/</code><code>td</code><code>&gt;</code>

<code>        </code><code>&lt;/</code><code>tr</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>table</code><code>&gt;</code>

<code>&lt;/</code><code>div</code><code>&gt;</code>

     隻需調用這行代碼即可實作:

<code>$(</code><code>"#ddd"</code><code>).jqprint();</code>

  下面我們列印一個複雜一點的,列印角色清單,效果果如下所示:  

DIFramework.NET ━ Web中列印的各種方案參考-歡迎補充

  單擊列印按鈕,列印效果如下圖所示:

DIFramework.NET ━ Web中列印的各種方案參考-歡迎補充

  1、我們可以使用導出Excel或PDF等方式來進行列印。

  2、使用商業列印控件進行列印,如Grid++ Report控件。

       3、lodop列印控件。

本文轉自yonghu86 51CTO部落格,原文連結:http://blog.51cto.com/yonghu/1600936,如需轉載請自行聯系原作者

繼續閱讀