asp.net 打印控件使用方法
代碼如下所示:
代碼
//調(diào)用PrintControl.ExecWB(?,?)實(shí)現(xiàn)直接打印和打印預(yù)覽功能。(直接用系統(tǒng)提供的print()方法打印無法隱藏某些區(qū)域)
//preview:是否顯示預(yù)覽。null/false:不顯示,true:顯示
function printPage(preview)
{
try
{
var content=window.document.body.innerHTML;
var oricontent=content;
while(content.indexOf("{$printhide}")>=0) content=content.replace("{$printhide}","style='display:none'");
if(content.indexOf("ID=\"PrintControl\"")<0) content=content+"<OBJECT ID=\"PrintControl\" WIDTH=0 HEIGHT=0 CLASSID=\"CLSID:8856F961-340A-11D0-A96B-00C04FD705A2\"></OBJECT>";
window.document.body.innerHTML=content;
//PrintControl.ExecWB(7,1)打印預(yù)覽,(1,1)打開,(4,1)另存為,(17,1)全選,(10,1)屬性,(6,1)打印,(6,6)直接打印,(8,1)頁面設(shè)置
if(preview==null||preview==false) PrintControl.ExecWB(6,1);
else PrintControl.ExecWB(7,1); //OLECMDID_PRINT=7; OLECMDEXECOPT_DONTPROMPTUSER=6/OLECMDEXECOPT_PROMPTUSER=1
window.document.body.innerHTML=oricontent;
}
catch(ex){ alert("執(zhí)行Javascript腳本出錯(cuò)。"); }
}
function printConten(preview, html)
{
try
{
var content=html;
var oricontent=window.document.body.innerHTML;
while(content.indexOf("{$printhide}")>=0) content=content.replace("{$printhide}","style='display:none'");
if(content.indexOf("ID=\"PrintControl\"")<0) content=content+"<OBJECT ID=\"PrintControl\" WIDTH=0 HEIGHT=0 CLASSID=\"CLSID:8856F961-340A-11D0-A96B-00C04FD705A2\"></OBJECT>";
window.document.body.innerHTML=content;
//PrintControl.ExecWB(7,1)打印預(yù)覽,(1,1)打開,(4,1)另存為,(17,1)全選,(10,1)屬性,(6,1)打印,(6,6)直接打印,(8,1)頁面設(shè)置
if(preview==null||preview==false) PrintControl.ExecWB(6,1);
else PrintControl.ExecWB(7,1); //OLECMDID_PRINT=7; OLECMDEXECOPT_DONTPROMPTUSER=6/OLECMDEXECOPT_PROMPTUSER=1
window.document.body.innerHTML=oricontent;
}
catch(ex){ alert("執(zhí)行Javascript腳本出錯(cuò)。"); }
}
上面兩個(gè)函數(shù)放在一個(gè)Js文件中,在頁面內(nèi)容中通過應(yīng)用該腳本文件并調(diào)用進(jìn)一步封裝的函數(shù)即可打印指定部分的內(nèi)容:
<script language="javascript">
function Print(preview) {
var text = document.getElementById("content").innerHTML;
printConten(preview, text);
}
打印的效果大致如下圖所示,如果打印的頁面在框架頁面中,那么需要選定“僅打印選定框架”的選項(xiàng)。

采用此種方法,不需要安裝任何控件,具有很好的兼容優(yōu)勢(shì),不過出來的報(bào)表內(nèi)容,好像控制起來會(huì)比較麻煩一些,特別對(duì)于一些報(bào)表方面的打印,需要輸出復(fù)雜的內(nèi)容是,也有一定的缺陷,但總體來說,也是一個(gè)較好的選擇。
后來在需要做一些證件套打方面的工作,這個(gè)控件就做不到了,因此需要一種方法或者控件,能夠較好處理套打方面的事情。
無意間,發(fā)現(xiàn)一個(gè)比較好的打印控件,支持各種格式的打印,還有我關(guān)心的證件套打功能,功能強(qiáng)大,使用也很簡(jiǎn)單的,非常值得推薦。
控件的相關(guān)地址:
控件下載 http://www.dbjr.com.cn/codes/23956.html
控件博客介紹:http://blog.sina.com.cn/s/articlelist_1340389911_0_1.html
應(yīng)用這個(gè)控件,普通報(bào)表的打印效果如下所示:
上面兩個(gè)報(bào)表的打印其實(shí)都差不多,都是打印部分的HTML內(nèi)容,不過后者看起來要好一點(diǎn),而且提供很完善的報(bào)表功能設(shè)置。
代碼大致如下所示。
代碼
<script language="javascript">
function Print(preview) {
var text = document.getElementById("content").innerHTML;
printConten(preview, text);
}
</script>
<script language="javascript" src="http://www.cnblogs.com/Scripts/CheckActivX.js"></script>
<object id="LODOP" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" width=0 height=0> </object>
<script language="javascript">
var LODOP = document.getElementById("LODOP"); //這行語句是為了符合DTD規(guī)范
CheckLodop();
</script>
<script language="javascript" type="text/javascript">
function Preview() {//打印預(yù)覽
CreateLicenseData();
LODOP.SET_SHOW_MODE("PREVIEW_IN_BROWSE", 1);
LODOP.PREVIEW();
};
function Setup() {//打印維護(hù) 給用戶調(diào)整位置
CreateLicenseData();
LODOP.PRINT_SETUP();
};
function Design() {//打印設(shè)計(jì) 開發(fā)人員設(shè)置內(nèi)容和位置
CreateLicenseData();
LODOP.PRINT_DESIGN();
};
function CreateLicenseData() {
LODOP.PRINT_INIT("查詢報(bào)表");
LODOP.ADD_PRINT_HTM(20, 40, 610, 900, document.all("content").innerHTML);
LODOP.PREVIEW();
}
</script>
很多時(shí)候,我們也沒的內(nèi)容,都是通過CSS來控制美觀的,所以有時(shí)候,我們打印部分HTML,沒有這些樣式的話,那么出來的Table格式和字體,可能都會(huì)發(fā)生變化,不太好看。那么就需要進(jìn)行HTML的樣式設(shè)置。

如果給打印內(nèi)容設(shè)置了樣式,那么出來的界面效果就好很多了。
設(shè)置樣式的代碼如下所示。
代碼
<script language="javascript" type="text/javascript">
function Preview() {//打印預(yù)覽
CreateLicenseData();
LODOP.SET_SHOW_MODE("PREVIEW_IN_BROWSE", 1);
LODOP.PREVIEW();
};
function CreateLicenseData() {
LODOP.PRINT_INIT("申請(qǐng)?zhí)幚韱?);
var strBodyStyle = "<link type='text/css' rel='stylesheet' /><style><!--table { border:1;background-color: #CBCBCC } td {background-color:#FFFFFE;border: 1; } th { background-color:#F1F1F3;padding-left:5px;border:1}--></style>";
var strFormHtml = strBodyStyle + "<body>" + document.getElementById("content").innerHTML + "</body>";
LODOP.ADD_PRINT_HTM(20, 40, 610, 900, strFormHtml);
LODOP.PREVIEW();
}
</script>
- VS2010/MFC編程(常用控件:樹形控件Tree Control控件創(chuàng)建h和實(shí)例)
- 使用VS2010 C#開發(fā)ActiveX控件(下),完整代碼打包下載
- 使用VS2010 C#開發(fā)ActiveX控件(上)
- asp.net GridView控件中模板列CheckBox全選、反選、取消
- asp.net+jquery滾動(dòng)滾動(dòng)條加載數(shù)據(jù)的下拉控件
- Asp.net 菜單控件簡(jiǎn)潔版
- asp.net AjaxControlToolKit--TabContainer控件的介紹
- ASP.NET單選按鈕控件RadioButton常用屬性和方法介紹
- asp.net fileupload控件上傳文件與多文件上傳
- VS2010中呈現(xiàn)控件時(shí)出錯(cuò)的解決方法
相關(guān)文章
ASP.NET Core根據(jù)環(huán)境變量支持多個(gè) appsettings.json配置文件
這篇文章主要介紹了ASP.NET Core根據(jù)環(huán)境變量支持多個(gè) appsettings.json配置文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08GridView分頁的實(shí)現(xiàn)(通用分頁模板)
要在GridView中加入AllowPaging=true,一頁數(shù)據(jù)多少行PageSize=10分頁時(shí)觸發(fā)的事件OnPageIndexChanging等等,感興趣的朋友可以了解下本文,希望對(duì)你有所幫助2013-04-04基于.NET中:自動(dòng)將請(qǐng)求參數(shù)綁定到ASPX、ASHX和MVC的方法(菜鳥必看)
這篇文章的目的就是告訴初學(xué)者如何自動(dòng)將客戶端用AJAX發(fā)送的參數(shù)自動(dòng)綁定為強(qiáng)類型的成員屬性或方法參數(shù)2013-04-04詳解.Net core2.0日志組件Log4net、Nlog簡(jiǎn)單性能測(cè)試
這篇文章主要介紹了詳解.Net core2.0日志組件Log4net、Nlog簡(jiǎn)單性能測(cè)試,比較log4net、nlog的文件寫入性能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07asp.net實(shí)現(xiàn)固定GridView標(biāo)題欄的方法(凍結(jié)列功能)
這篇文章主要介紹了asp.net實(shí)現(xiàn)固定GridView標(biāo)題欄的方法,即凍結(jié)列功能,涉及GridView結(jié)合前端js操作數(shù)據(jù)顯示的相關(guān)技巧,需要的朋友可以參考下2016-06-06asp.net自定義控件回發(fā)數(shù)據(jù)實(shí)現(xiàn)方案與代碼
在實(shí)現(xiàn)asp.net的自定義控件中,若要實(shí)現(xiàn)數(shù)據(jù)的回發(fā)或者post數(shù)據(jù),那自義控件必須實(shí)現(xiàn)IPostBackDataHandler接口, 在該接口中有兩個(gè)方法一個(gè)是LoadPostData,另一個(gè)是RaisePostDataChangedEvent,需要的朋友可以了解下2012-12-12不使用web服務(wù)(Service)實(shí)現(xiàn)文本框自動(dòng)完成擴(kuò)展
以前寫Ajax 的AutoCompleteExtender功能,都需要寫WCF Service或是Web Service數(shù)據(jù)源,下面的演示,不用寫Service來實(shí)現(xiàn)文本框的AutoCompete extender功能,感興趣的朋友可以參考下哈2013-04-04