key words: IE打印 web打印 頁面打印
最近又碰到了頁面打印,順便記錄一下,本來下午寫完了,可惜最近blogjava最近總是出現問題,提交居然失敗,只好再來一次.
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("請在IE里設置允許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
}
//調用接口
function?printit(HeadName1,?DivName)?{
????if?(confirm('是否確認打印?'))?{
????????PrintDataSourec(HeadName1,?DivName);
????????return;
????}
}
//帶配置的接口
function?printitWithSetup(HeadName1,?HeadName2,?DivName)?{
????if?(confirm('是否確認'))?{
????????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);
}
調用很簡單,把要打印的部分直接放在 <div>里就可以了
<div?id="myPrint">
????your?content?to?print
</div>
把div傳給
printit就可以了
由于本質上是js調用了ActiveX,所以會涉及到安全的問題,如果客戶端對ActiveX禁用會出現問題,所以可以在異常處理信息里告訴用戶,可以在安全設置里把你的站點的URL放進信任站點
關于打印,還有另一種類型,就是發票套打,可以用Applet實現,也可以用自己寫的ActiveX來實現,上一次的一個phs項目里他們就使用vc寫的ActiveX,用起來感覺不錯,不過依然存在安全上的限制問題,不過如果用Applet的話實際上也是需要客戶端安裝jre的,從某種角度上來說差不多。話又說回來,做項目不同于做產品,可以對客戶有所要求? :)