摘錄地址:http://blog.csdn.net/llwen218/archive/2006/06/07/778197.aspx
一、利用IE內(nèi)部打印組件:
這個方案也許是最簡單的,當(dāng)然不會很“專業(yè)”。我們假設(shè)客戶端是IE6.0版本,因為在IE6.0中才完全體現(xiàn)我們所要應(yīng)用的“打印模板機制”。它在精確控制頁面邊界,文本間隔,以及打印的統(tǒng)一性上,功能更為完備。
至于這種方案的實現(xiàn)也相當(dāng)簡單,它主要只涉及到DEVICERECT,LAYOUTRECT兩種行為方式,分別用來定義整體頁面風(fēng)格及單個頁面內(nèi)容風(fēng)格。而我們所要打印的HTML可以通過LAYOUTRECT的CONTENTSRC屬性來指定。可喜的是即使我們有1000個頁面要打印,也可以簡單的通過我們的打印模板添加動態(tài)修建HTML功能,實現(xiàn)單模板控制多文件風(fēng)格。(請參考本文所附代碼)。這個方案在CSDN有詳細(xì)的介紹,但沒有附示例。示例文件可以在MSDN上下載得到。
二、利用外部DLL打印組件:
此類方案實現(xiàn)倒也不很復(fù)雜,只是利用DLL本身內(nèi)部類函數(shù)操作,創(chuàng)建報表、格式并進行打印,而無需考慮內(nèi)部實現(xiàn)環(huán)節(jié)。但對于WEB打印來說,似乎不合適。我個人認(rèn)為在WEB上創(chuàng)建報表的HTML,然后利用客戶端IE打印是最好的解決方式。而如果你的C#或VB不是很好,那么外部DLL的類型解決是一個很讓人頭疼的事情,何況還要應(yīng)用到WEB環(huán)境下。這種方案我用傻兒的打印組件調(diào)試過,但沒成功。
三、利用外部OCX類控件
這類方案和第二種差不多,也是建立在別人的成果的基礎(chǔ)上,但是在ASP.net下,如果沒有這個控件的說明書,我相信你也會和我一樣,不知道該從哪里下手開始設(shè)計。
四、利用XML解析打印
這種解決方案在微軟家園有很詳細(xì)的介紹,其原理就是解析出定義好的XML格式標(biāo)記,解讀出文件中標(biāo)記的參數(shù)定義,最后將這些信息還原成打印機輸出的圖形格式。很簡單的理解,例如你要打印一個簡單的表格,那么我們將表格解析成為文本和表格兩部分,程式設(shè)計時我們遇到文本文本則輸出文本到打印機,遇到表格標(biāo)簽即輸出LINE到打印機。如此你可以自定義一些特殊的標(biāo)簽,如圖片,特殊形狀等。這種方案開發(fā)起來很簡單,而且很“專業(yè)”,不過其缺點:客戶端需要安裝.NET FrameWork.(傻了。。)
五、轉(zhuǎn)化為PDF文件,利用PDF打印
轉(zhuǎn)化為其它類型的文件輸出,是打印方案很常用的一種方式,而PDF文件格式以其優(yōu)異的“品質(zhì)”(打印品質(zhì))和“性能”(應(yīng)用功能)無疑是一種很經(jīng)濟的方式。而且從WEB向PDF轉(zhuǎn)換不是很困難,資源占用也不是很嚴(yán)重,這是它在同類方案中的優(yōu)點,也是異類方案中的缺點。如此你可以去PDFCHINA上搜尋相關(guān)可用信息。
六、利用外部設(shè)計器設(shè)計報表,內(nèi)部程式碼控制打印
這里我針對思路來講這種方案,并針對VISUAL DESIGNER報表組件。我們預(yù)先得利用設(shè)計器做好報表的格式,爾后在程式碼里面住報表各表單“套值”,就這么簡單。有點像ACCESS里面的報表設(shè)計方式。我所在公司的管理系統(tǒng)就是ACCESS寫的,所以我其實挺喜歡這種方案。至于VISUAL DESIGNER可以在CSDN下載到,并有開發(fā)說明書。
七、自己寫專業(yè)報表打印組件
這是*不得已的作法,當(dāng)然更符合自己的要求,但是如果你不是專業(yè)的開發(fā)人員或有其它特殊目的,這些時間就不要花了。很羅索的。如果你有興趣寫,那么我建議你先看看第五種方案的思路和說明文檔。
WEB打印至今還沒有完美的解決方案,我個人期待IE在這一方面再加改進,以方便我們這一群“勞苦大眾”。
八、打印頁面:
<a href="javascript:window.print()"> 打印 </a>
打印時選擇內(nèi)容進行打印:
往往在打印網(wǎng)頁時,執(zhí)行window.print會把網(wǎng)頁的所有內(nèi)容全部打印,而有一大部分比如網(wǎng)頁頭部的圖片、尾部的版權(quán)聲明、按鈕等,并沒有必要打印出來,打印出來浪費時間又浪費油墨。如何把這些內(nèi)容進行有選擇的打印讓你的打印文本更簡潔明了,更省時美觀呢?以下就對這個問題寫一個JS文本,供有緣人參考。
<script language="javascript">
function DtPrint() {
if (window.print) {
var p_1 = document.all.p_1.innerHTML;
var p_2 = document.all.p_2.innerHTML;
這里根據(jù)你要打印的哪些內(nèi)容,從原顯示頁面中用
<div id=P_1>p_1....</div><div id=P_2>p_2...</div>等標(biāo)示,要打印多少項目就用多少下
提示一下,自己體會:),此處我只寫出兩個出來:D
var css = '<style type="text/css">' +
'p { line-height: 120%}' +
'.ftitle { line-height: 120%; font-size: 18px; color: #000000}' +
'td { font-size: 10px; color: #000000}' +
'</style>' ;
這里是定義打印用的CSS,可以根據(jù)你自己的設(shè)定去寫適合你的格式哦
本文只定義三個,p,.ftitle,td,其余自己寫。越美觀越好。
var body ='<table width="640" border="0" cellspacing="0" cellpadding="5">' +
' <tr> ' +
' <td class="fbody"> ' +
' <div align="center" class=ftitle>' + p_title + '</div>' + p_2 +
' </td>' +
' </tr>' +
'</table>';
body這才是你重新設(shè)置的打印格式,根據(jù)你的打印要求,重新把原顯示網(wǎng)頁的DIV內(nèi)容重新
組合,可以根據(jù)你原來的表格內(nèi)容,去掉不要打印的東東,只調(diào)用你要打印的內(nèi)容
另外:根據(jù)經(jīng)驗,表格大小為640左右正好是適合A4打印幅面!哈!
document.body.innerHTML = '<center>' + css + body + '</center>';
然后在這里把document.body重新設(shè)一下,這就是打印文檔!(有加CSS格式了)
window.print();
}
}
</SCRIPT>
在頁面中,然后通過:dtPrint()調(diào)用,就行了
比如:
<input type="button" value="打印" LANGUAGE="javascript" onclick="return
dtPrint()" ID="Button2" NAME="Button1">
噢!注意這個可以不用<div></div>標(biāo)示哦,即使標(biāo)示,也不用在以上打印文本中調(diào)用出來,那樣這個Button就不會打印出來了哦