關于ASP.NET頁面打印技術的總結

發表于:2008-04-07來源:作者:點擊數: 標簽:
網絡 打印概述 B/S結構導致了Web應用程序 中打印的特殊性。 程序運行在瀏覽器中,打印機在本地,而文件確可能在 服務器 上,導致了打印控制不是很靈活。 格式如何控制和定制等,是我們 開發 中可能會面對的問題。 打印文檔的生成 1、客戶端腳本方式 一般情況
網絡打印概述

  • B/S結構導致了Web應用程序中打印的特殊性。

  • 程序運行在瀏覽器中,打印機在本地,而文件確可能在服務器上,導致了打印控制不是很靈活。

  • 格式如何控制和定制等,是我們開發中可能會面對的問題。

  打印文檔的生成

  • 1、客戶端腳本方式

  一般情況下,主要使用JS 可以分析源頁面的內容,將欲打印的頁面元素提取出來,實現打印。通過分析源文檔的內容,可以生成打印目標文檔。

  優點:客戶端獨立完成打印目標文檔的生成,減輕服務器負荷;

  缺點:源文檔的分析操作復雜,并且源文檔中的打印內容要有約定。

  • 2、服務器端程序方式

  利用后臺代碼從數據庫中讀取打印源,生成打印目標文檔。當的頁面生成時,還應適當考慮使用CSS 來實現強制分頁控制。

  優點:可以生成內容非常豐富的打印目標文檔,目標文檔的內容的可控性強。由于打印內容是從數據庫中獲取的,所以生成操作相對簡單;

  缺點:服務器端負載比較大;

  頁面設置

  • 頁面設置主要是指設置打印文檔的頁邊距、頁眉、頁腳、紙張等內容。頁面設置將直接影響到打印文檔版面的生成效果,所以它和打印文檔的生成有著密切的關系。比如:表格的行數、大小、位置、字體的大小等。

  現有的技術是利用IE6.0 內置的打印模板方式來控制頁面設置,其可以對打印目標文檔產生非常大的影響。打印模板可以控制頁邊距、頁眉、頁腳、奇偶頁等內容,并可以將用戶的設置取得,還可以將設置發送到服務器端。打印模板技術可以自定預覽窗口和打印格式,最大限度地影響目標文檔和打印效果。

  IE直接打印

  • 即直接調用window.print或者webrower控件的ExecWB方法來打印。

  • 優點:方便快捷,客戶端無需任何設置即可。

  • 缺點:打印控制不是很靈活。如果直接調用

  window.print來打印頁面,頁面上別的元素也會被打印處理,頁頭頁尾的格式也不好控制。

  • 常用方法:大部分情況會把查詢的結果綁定到DataGrid上來,然后打印DataGrid。這種情況的打印一般來說格式比較固定簡單,確定后基本不會再作更改。所以可以采用IE直接打印。

  【實例代碼】

  注:①這是客戶端通過window.print打印指定內容。這里定義sprnstr和eprnstr來指定內容

  執行代碼:

以下是引用片段:
<input type="button" name="print" value="預覽并打印" onclick="preview()">

 ?、谌绻苯邮褂脀indow.print將打印頁面上的所有內容,但是我們可以使用

以下是引用片段:
st<<style> @media Print { .Noprn { DISPLAY: none }}
是用來指定不打印的內容。
 
script language="Javascript">
function preview()
{
    bdhtml=window.document.body.innerHTML;
    sprnstr="<!--startprint-->";
    eprnstr="<!--endprint-->";
    prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17);
    prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));
    window.document.body.innerHTML=prnhtml;
    window.print();
}
</script>
<!--省略部分代碼-->
<form id="WebForm1" method="post" runat="server">
     <center>本部分以上不被打印</center>
     <!--startprint-->
     <div align="center">
         <asp:DataGrid id="dgShow" runat="server">
              <!--省略部分代碼-->
         </asp:DataGrid>
     </div>
     <!--endprint-->
     <center>本部分以下不被打印</center>
     <div align="center">
         <input type="button" name="print" value="預覽并打印" onclick="preview()">
     </div>
     <style> @media Print { .Noprn { DISPLAY: none }}
     </style>
     <p class="Noprn">不打印</p>
     <table id="datagrid">
         <tr>
              <td>打印</td>
         </tr>
     </table>
     <input class="Noprn" type="button" onclick="window.print()" value="print">
</form>

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97