js 打印pdf 兼容ie_JavaScript设置默认横向打印,兼容IE浏览器,谷歌浏览器

本文介绍如何在JavaScript中实现默认横向打印,确保兼容IE和Chrome浏览器。对于Chrome,通过设置CSS或JS简单实现;而在IE浏览器中,需要使用WebBrowser对象并模拟键盘快捷键来设置。如果在IE中遇到ActiveXObject生成失败的问题,可能是浏览器禁用了ActiveX,需在设置中启用相关脚本执行。

通常来说我们需要使用打印功能一般都是直接使用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控件初始化前执行脚本 -> 启用

c400af6f220e1df81636bab7c9e7d360.png

附录,关于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就可以了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值