key words: IE打印 web打印 頁(yè)面打印
最近又碰到了頁(yè)面打印,順便記錄一下,本來(lái)下午寫(xiě)完了,可惜最近blogjava最近總是出現(xiàn)問(wèn)題,提交居然失敗,只好再來(lái)一次.
function?SaveDataSourec(HeadName1,?HeadName2,?DivName)?{
????var?Div1?=?DivName.innerHTML;
????var?css?=?'<style?type="text/css"?media=all>'?+
??????????????'p?{?line-height:?120%}'?+
??????????????'.fhead?{???font-size:?9pt;?text-decoration:?none;?color:?104A7B}'?+
??????????????'.ftitle?{?line-height:?120%;?font-size:?18px;?color:?#000000}'?+
??????????????'td?{?font-size:?10px;?color:?#000000}'?+
??????????????'</style>'?;
????var?body?=?'<table?width="640"?border="0"?cellspacing="0"?cellpadding="5">'?+
???????????????'?<tr>?'?+
???????????????'?<td?class="fbody">'?+
???????????????'?<b><div?align="center">'?+?'<font?size="+1"?class=fhead>'?+?HeadName1?+?'</div>'?+?'</font></b>'?+
???????????????'?<b><div?align="center">'?+?'<font?size="+1"?class=fhead>'?+?HeadName2?+?'</div>'?+?'</font></b>'?+
???????????????'?</td>'?+
???????????????'?</tr>'?+
???????????????'?<tr>?'?+
???????????????'?<td?class="fbody">'?+
???????????????'?<div?align="center"?class=ftitle>'?+?Div1?+?'</div>'?+
???????????????'?</td>'?+
???????????????'?</tr>'?+
???????????????'</table>';
????document.body.innerHTML?=?'<center>'?+?css?+?body?+?'<OBJECT?classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"?height=0?id=wb?name=wb?width=0></OBJECT>'?+?'</center>';
}
function?PrintDataSourec(HeadName1,?DivName)?{
????var?oldBody?=?document.body.innerHTML;
????var?Div1?=?DivName.innerHTML;
????var?css?=?'<style?type="text/css"?media=all>'?+
??????????????'p?{?line-height:?120%}'?+
??????????????'.fhead?{???font-size:?40pt;?text-decoration:?none;?color:?104A7B}'?+
??????????????'.ftitle?{?line-height:?120%;?font-size:?25px;?color:?#000000}'?+
??????????????'td?{?font-size:?25px;?color:?#000000}'?+
??????????????'</style>'?;
????var?body?=
????????????'<table?width="100%"?border="0"?cellspacing="0"?cellpadding="0">'?+
????????????'?<tr>'?+
????????????'???<td?height="40"></td>'?+
????????????'?</tr>'?+
????????????'</table>'?+
????????????'<table?width="640"?border="0"?cellspacing="0"?cellpadding="5">'?+
????????????'?<tr>?'?+
????????????'?<td?class="fbody">'?+
????????????'?<b><div?align="center">'?+?'<font?size="+3"?class=fhead>'?+?HeadName1?+?'</div>'?+?'</font></b>'?+
????????????'?</td>'?+
????????????'?</tr>'?+
????????????'?<tr>?'?+
????????????'?<td?class="fbody">'?+
????????????'?<div?align="center"?class=ftitle>'?+?Div1?+?'</div>'?+
????????????'?</td>'?+
????????????'?</tr>'?+
????????????'</table>'?+
????????????'<table?width="640"?border="0"?cellspacing="0"?cellpadding="5">'?+
????????????'?<tr>?'?+
????????????'?<td?class="fbody">'?+
????????????'?</td>'?+
????????????'?</tr>'?+
????????????'</table>';
????document.body.innerHTML?=?'<center>'?+?css?+?body?+?'<OBJECT?classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"?height=0?id=wb?name=wb?width=0></OBJECT>'?+?'</center>';
????try?{
????????wb.execwb(6,?6);
????}
????catch(ex)?{
????????alert("請(qǐng)?jiān)冢桑爬镌O(shè)置允許ActiveX");
????}
????document.body.innerHTML?=?oldBody;
}
function?PrintDataSourecWithSetup(HeadName1,?HeadName2,?DivName)?{
????var?oldBody?=?document.body.innerHTML;
????var?Div1?=?DivName.innerHTML;
????var?css?=?'<style?type="text/css"?media=all>'?+
??????????????'p?{?line-height:?120%}'?+
??????????????'.fhead?{???font-size:?9pt;?text-decoration:?none;?color:?104A7B}'?+
??????????????'.ftitle?{?line-height:?120%;?font-size:?18px;?color:?#000000}'?+
??????????????'td?{?font-size:?10px;?color:?#000000}'?+
??????????????'</style>'?;
????var?body?=?'<table?width="640"?border="0"?cellspacing="0"?cellpadding="5">'?+
???????????????'?<tr>?'?+
???????????????'?<td?class="fbody">'?+
???????????????'?<b><div?align="center">'?+?'<font?size="+1"?class=fhead>'?+?HeadName1?+?'</div>'?+?'</font></b>'?+
???????????????'?<b><div?align="center">'?+?'<font?size="+1"?class=fhead>'?+?HeadName2?+?'</div>'?+?'</font></b>'?+
???????????????'?</td>'?+
???????????????'?</tr>'?+
???????????????'?<tr>?'?+
???????????????'?<td?class="fbody">'?+
???????????????'?<div?align="center"?class=ftitle>'?+?Div1?+?'</div>'?+
???????????????'?</td>'?+
???????????????'?</tr>'?+
???????????????'</table>';
????document.body.innerHTML?=?'<center>'?+?css?+?body?+?'<OBJECT?classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"?height=0?id=wb?name=wb?width=0></OBJECT>'?+?'</center>';
????wb.execwb(6,?6);
????document.body.innerHTML?=?oldBody;
}
function?SetPrintSettings()?{
????//?--?advanced?features
????factory.printing.SetMarginMeasure(2)?//?measure?margins?in?inches
????factory.SetPageRange(false,?1,?3)?//?need?pages?from?1?to?3
????factory.printing.printer?=?"HP?DeskJet?870C"
????factory.printing.copies?=?2
????factory.printing.collate?=?true
????factory.printing.paperSize?=?"A4"
????factory.printing.paperSource?=?"Manual?feed"
????//?--?basic?features
????factory.printing.header?=?"This?is?MeadCo"
????factory.printing.footer?=?"Advanced?Printing?by?ScriptX"
????factory.printing.portrait?=?false
????factory.printing.leftMargin?=?1.0
????factory.printing.topMargin?=?1.0
????factory.printing.rightMargin?=?1.0
????factory.printing.bottomMargin?=?1.0
}
//調(diào)用接口
function?printit(HeadName1,?DivName)?{
????if?(confirm('是否確認(rèn)打印?'))?{
????????PrintDataSourec(HeadName1,?DivName);
????????return;
????}
}
//帶配置的接口
function?printitWithSetup(HeadName1,?HeadName2,?DivName)?{
????if?(confirm('是否確認(rèn)'))?{
????????PrintDataSourecWithSetup(HeadName1,?HeadName2,?DivName);
????}
}
//另存
function?saveas(HeadName1,?DivName)?{
????SaveDataSourec(HeadName1,?"",?DivName);
????//wb.execwb(4,1);
????top.frames("mainFrame").document.execCommand("saveAs");
????window.history.back(0);
}
調(diào)用很簡(jiǎn)單,把要打印的部分直接放在 <div>里就可以了
<div?id="myPrint">
????your?content?to?print
</div>
把div傳給
printit就可以了
由于本質(zhì)上是js調(diào)用了ActiveX,所以會(huì)涉及到安全的問(wèn)題,如果客戶端對(duì)ActiveX禁用會(huì)出現(xiàn)問(wèn)題,所以可以在異常處理信息里告訴用戶,可以在安全設(shè)置里把你的站點(diǎn)的URL放進(jìn)信任站點(diǎn)
關(guān)于打印,還有另一種類(lèi)型,就是發(fā)票套打,可以用Applet實(shí)現(xiàn),也可以用自己寫(xiě)的ActiveX來(lái)實(shí)現(xiàn),上一次的一個(gè)phs項(xiàng)目里他們就使用vc寫(xiě)的ActiveX,用起來(lái)感覺(jué)不錯(cuò),不過(guò)依然存在安全上的限制問(wèn)題,不過(guò)如果用Applet的話實(shí)際上也是需要客戶端安裝jre的,從某種角度上來(lái)說(shuō)差不多。話又說(shuō)回來(lái),做項(xiàng)目不同于做產(chǎn)品,可以對(duì)客戶有所要求? :)