通常来说我们需要使用打印功能一般都是直接使用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 = "SoftwareMicrosoftInternet ExplorerPageSetup"
//设置网页打印的页眉页脚为空
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就可以了。
本文介绍如何在JavaScript中实现默认横向打印,确保兼容IE和Chrome浏览器。对于Chrome,通过设置CSS或JS简单实现;而在IE浏览器中,需要使用WebBrowser对象并模拟键盘快捷键来设置。如果在IE中遇到ActiveXObject生成失败的问题,可能是浏览器禁用了ActiveX,需在设置中启用相关脚本执行。

2924

被折叠的 条评论
为什么被折叠?



