網絡打印概述
; B/S結構導致了Web應用程序中打印的特殊性
; 程序運行在浏覽器中打印機在本地而文件確可能在服務器上導致了打印控制不是很靈活
; 格式如何控制和定制等是我們開發中可能會面對的問題
打印文檔的生成
; 客戶端腳本方式
一般情況下主要使用JS 可以分析源頁面的內容將欲打印的頁面元素提取出來實現打印通過分析源文檔的內容可以生成打印目標文檔
優點客戶端獨立完成打印目標文檔的生成減輕服務器負荷;
缺點源文檔的分析操作復雜並且源文檔中的打印內容要有約定
; 服務器端程序方式
利用後台代碼從數據庫中讀取打印源生成打印目標文檔當的頁面生成時還應適當考慮使用CSS 來實現強制分頁控制
優點可以生成內容非常豐富的打印目標文檔目標文檔的內容的可控性強由於打印內容是從數據庫中獲取的所以生成操作相對簡單;
缺點服務器端負載比較大;
頁面設置
; 頁面設置主要是指設置打印文檔的頁邊距頁眉頁腳紙張等內容頁面設置將直接影響到打印文檔版面的生成效果所以它和打印文檔的生成有著密切的關系比如表格的行數大小位置字體的大小等
現有的技術是利用IE 內置的打印模板方式來控制頁面設置其可以對打印目標文檔產生非常大的影響打印模板可以控制頁邊距頁眉頁腳奇偶頁等內容並可以將用戶的設置取得還可以將設置發送到服務器端打印模板技術可以自定預覽窗口和打印格式最大限度地影響目標文檔和打印效果
IE直接打印
; 即直接調用windowprint或者webrower控件的ExecWB方法來打印
; 優點方便快捷客戶端無需任何設置即可
; 缺點打印控制不是很靈活如果直接調用
windowprint來打印頁面頁面上別的元素也會被打印處理頁頭頁尾的格式也不好控制
; 常用方法大部分情況會把查詢的結果綁定到DataGrid上來然後打印DataGrid這種情況的打印一般來說格式比較固定簡單確定後基本不會再作更改所以可以采用IE直接打印
【實例代碼】
注①這是客戶端通過windowprint打印指定內容這裡定義sprnstr和eprnstr來指定內容
執行代碼
以下是引用片段
<input type=button name=print value=預覽並打印 onclick=preview()>
②如果直接使用windowprint將打印頁面上的所有內容但是我們可以使用
以下是引用片段
st<<style> @media Print { Noprn { DISPLAY: none }}
是用來指定不打印的內容
script language=Javascript>
function preview()
{
bdhtml=windowdocumentbodyinnerHTML;
sprnstr=<!startprint>;
eprnstr=<!endprint>;
prnhtml=bdhtmlsubstr(bdhtmlindexOf(sprnstr)+);
prnhtml=prnhtmlsubstring(prnhtmlindexOf(eprnstr));
windowdocumentbodyinnerHTML=prnhtml;
windowprint();
}
</script>
<!省略部分代碼>
<form id=WebForm 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=windowprint() value=print>
</form>
[] [] [] []
From:http://tw.wingwit.com/Article/program/net/201311/14976.html