解決Web打印問(wèn)題的方案
在進(jìn)行Web項(xiàng)目開(kāi)發(fā)過(guò)程中,經(jīng)常需要處理打印頁(yè)面內(nèi)容的需求。通常情況下,我們會(huì)通過(guò)Javascript調(diào)用系統(tǒng)內(nèi)置的打印方法來(lái)實(shí)現(xiàn)打印功能,例如使用PrintControl.ExecWB(?, ?)函
在進(jìn)行Web項(xiàng)目開(kāi)發(fā)過(guò)程中,經(jīng)常需要處理打印頁(yè)面內(nèi)容的需求。通常情況下,我們會(huì)通過(guò)Javascript調(diào)用系統(tǒng)內(nèi)置的打印方法來(lái)實(shí)現(xiàn)打印功能,例如使用PrintControl.ExecWB(?, ?)函數(shù)來(lái)實(shí)現(xiàn)直接打印和打印預(yù)覽功能。盡管這種方法的打印效果和控制性有一定限制,但對(duì)于一般的打印需求而言,仍然能夠滿足基本要求。
// 調(diào)用PrintControl.ExecWB(?, ?)實(shí)現(xiàn)直接打印和打印預(yù)覽功能。
// preview:是否顯示預(yù)覽。null/false:不顯示,true:顯示
上述代碼可以放在一個(gè)獨(dú)立的JS文件中,并在頁(yè)面中引用該腳本文件,通過(guò)進(jìn)一步封裝的函數(shù)來(lái)打印指定部分的內(nèi)容:
lt;script language"javascript"gt;
function Print(preview) {
var text ("content").innerHTML;
printContent(preview, text);
}
lt;/scriptgt;
然而,很多時(shí)候我們?cè)陧?yè)面中通過(guò)CSS來(lái)控制樣式以達(dá)到更好的美觀效果。因此,在打印部分HTML內(nèi)容時(shí),如果沒(méi)有考慮這些樣式設(shè)置,打印出來(lái)的表格格式和字體可能會(huì)發(fā)生變化,影響觀感。為了解決這個(gè)問(wèn)題,我們需要進(jìn)行HTML樣式的設(shè)置。
打印效果大致如下圖所示。如果打印的頁(yè)面在框架中,可能還需要選擇“僅打印選定框架”的選項(xiàng)。使用此方法不需要安裝任何控件,具有很好的兼容性。然而,在處理一些復(fù)雜內(nèi)容的報(bào)表打印時(shí),可能會(huì)遇到一些難以控制的問(wèn)題,因此并非完美的選擇。
后來(lái)在需要進(jìn)行證件套打方面的工作時(shí),上述的打印控件無(wú)法滿足需求,因此需要尋找另一種能夠更好處理套打事務(wù)的方法或控件。偶然間,我發(fā)現(xiàn)了一個(gè)功能強(qiáng)大且使用簡(jiǎn)單的打印控件,它支持各種格式的打印,并且提供了我關(guān)心的證件套打功能,非常值得推薦。
上述兩種打印方式其實(shí)原理類似,都是打印部分HTML內(nèi)容。然而后者看起來(lái)更加精細(xì),并且提供了完善的報(bào)表功能設(shè)置。