通常来说我们需要使用打印功能一般都是直接使用window.print()
,因为此方法兼容目前所有浏览器,但如果需要设置打印的一些参数的话,其实各种浏览器之间都有种区别,造成不兼容。
这里说一下关于设置默认横向打印的一些写法,亲测有效。
首先先说谷歌浏览器吧,它设置默认横向是比较简单的,可以通过设置css或js的方法,如:
//一般语言的css写法:
<style type="text/css" media="print">
@page {size:landscape;}
</style>
//C#中如果是使用了MVC前端使用了Razor引擎,,那@符号会优先被使用需要作一下转义
<style type="text/css" media="print">
@("@")page {size:landscape;}
</style>
js写法,只需要将下面代码调用放在window.print()
打印方法前即可,因为此属性设置在IE浏览器是没有的,至于其他浏览器,我只试过谷歌可以使用。
try{
print.portrait = false;
}
catch (e){
}
至于IE浏览器的写法相对来说是比较复杂的,首先需要添加WebBrowser对象,然后JS模拟键盘快捷键设置浏览器横向打印。
<body>
<object id="WebBrowser" height="0" width="0" classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2" VIEWASTEXT></object>
<div>打印内容。。。</div>
</body>
这一段JS代码就是模拟键盘快捷键设置。
function setLandscape() {
try{
var RegWsh = new ActiveXObject("WScript.Shell");
RegWsh.sendKeys('%fu');//相当于Alt+F+U
RegWsh.sendKeys('%a');//相当于Alt+A
RegWsh.sendKeys('{ENTER}');//相当于回车键
}
catch(e){ }
}
完整的代码:
<script>
var larg, altez;
if(document.layers)
{
larg = screen.availWidth - 10;
altez = screen.availHeight - 20;
}
else
{
larg = screen.availWidth + 8;
altez = screen.availHeight + 7;
}
self.resizeTo(larg, altez);
self.moveTo(-4, -4);
var hkey_root, hkey_path, hkey_key
hkey_root = "HKEY_CURRENT_USER"
hkey_path = "\\Software\\Microsoft\\Internet Explorer\\PageSetup\\"
//设置网页打印的页眉页脚为空
function pagesetup_null() {
try {
var RegWsh = new ActiveXObject("WScript.Shell");
hkey_key = "header";
RegWsh.RegWrite(hkey_root + hkey_path + hkey_key, "");
hkey_key = "footer";
RegWsh.RegWrite(hkey_root + hkey_path + hkey_key, "");
//RegWsh.sendKeys('%fu');
} catch (e) { }
}
function setLandscape() {
try{
var RegWsh = new ActiveXObject("WScript.Shell");
RegWsh.sendKeys('%fu');
RegWsh.sendKeys('%a');
RegWsh.sendKeys('{ENTER}');
}
catch(e){ }
}
function wp (){
window.print();
}
function doPrint()
{
setLandscape();
WebBrowser.execwb(8, 1);//弹出横向打印设置
setTimeout("pagesetup_null()",1000);
//pagesetup_null();
setTimeout("wp()", 1500);
return false;
}
</script>
<body>
<object id="WebBrowser" height="0" width="0" classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2" VIEWASTEXT></object>
<div>打印内容。。。</div>
</body>
PS.
如果IE浏览在上述代码设置没有生效,前端调试显示无法生成ActiveXObject的话,那么可能就是浏览器禁用了ActiveX控制,可以先到浏览器设置开启控件功能。
具体步骤:设置-> 互联网选项 ->安全 ->本地Intranet ->自定义级别 ->对未标记为可安全执行脚本的ActiveX控件初始化前执行脚本 -> 启用
附录,关于WebBrowser.execwb()对象参数的说明
常用的
4,1 保存网页
4,2 保存网页(对话框)
6,1 直接打印
6,2 直接打印
7,1 打印预览
7,2 打印预览
8,1 选择参数,打印参数设置
8,2 选择参数,打印参数设置
10,1 查看页面属性
10,2 查看页面属性
17,1 全选
17,2 全选
22,1 重新载入当前页
22,2 重新载入当前页
函数说明:
1. <object id="WebBrowser" width=0 height=0 classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></object>
2. 调用方法。
WebBrowser.ExecWB nCmdID, nCmdExecOpt, [pvaIn], [pvaOut]
3. 参数说明。
(a).nCmdID
OLECMDID_OPEN = 1,
OLECMDID_NEW = 2,
OLECMDID_SAVE = 3,
OLECMDID_SAVEAS = 4,
OLECMDID_SAVECOPYAS = 5,
OLECMDID_PRINT = 6,
OLECMDID_PRINTPREVIEW = 7,
OLECMDID_PAGESETUP = 8,
OLECMDID_SPELL = 9,
OLECMDID_PROPERTIES = 10,
OLECMDID_CUT = 11,
OLECMDID_COPY = 12,
OLECMDID_PASTE = 13,
OLECMDID_PASTESPECIAL = 14,
OLECMDID_UNDO = 15,
OLECMDID_REDO = 16,
OLECMDID_SELECTALL = 17,
OLECMDID_CLEARSELECTION = 18,
OLECMDID_ZOOM = 19,
OLECMDID_GETZOOMRANGE = 20
OLECMDID_UPDATECOMMANDS = 21
OLECMDID_REFRESH = 22
OLECMDID_STOP = 23
OLECMDID_HIDETOOLBARS = 24
OLECMDID_SETPROGRESSMAX = 25
OLECMDID_SETPROGRESSPOS = 26
OLECMDID_SETPROGRESSTEXT = 27
OLECMDID_SETTITLE = 28
OLECMDID_SETDOWNLOADSTATE = 29
OLECMDID_STOPDOWNLOAD = 30
上面的关键词都可以在浏览器的菜单里面找到对应的选项﹐大家一看就明白的﹗
(b).nCmdExecOpt
OLECMDEXECOPT_DODEFAULT = 0,
OLECMDEXECOPT_PROMPTUSER = 1,
LECMDEXECOPT_DONTPROMPTUSER = 2,
OLECMDEXECOPT_SHOWHELP = 3
对于这个参数﹐一般来说﹐选1就可以了。
网友评论