打印

本文介绍了一种使用JavaScript和jQuery实现的网页局部打印功能。该插件支持多种浏览器,包括IE、Firefox、Safari和Opera,并能针对不同类型的打印需求进行定制,如打印特定元素、整个页面或指定HTML内容。

(function ($) {

    $.fn.printArea = function () {
        if ($.browser.msie) {
            //这是一个IE浏览器
            ie($(this));
        } else if ($.browser.opera) {
            sm($(this));
            //这是一个opera浏览器;
        } else if ($.browser.mozilla) {
            sm($(this));
            //这是一个火狐浏览器
        } else if ($.browser.safari) {
            //这是一safari浏览器
            sm($(this));
        }


    }

})(jQuery);

var removePrintArea = function (id) {
    $("iframe#" + id).remove();
};
//safari浏览器  火狐浏览器 opera浏览器;
function sm(obj) {
  
    // window.location.reload(); 
    var printAreaCount = 0;
    var ele = obj;
    var idPrefix = "printArea_";
    removePrintArea(idPrefix + printAreaCount);
    printAreaCount++;
    var iframeId = idPrefix + printAreaCount;
    var iframeStyle = 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;';
    iframe = document.createElement('IFRAME');
    $(iframe).attr({ style: iframeStyle,
        id: iframeId
    });
    document.body.appendChild(iframe);
    var doc = iframe.contentWindow.document;
    $(document).find("link")
.filter(function () {
    return $(this).attr("rel").toLowerCase() == "stylesheet";
})
.each(function () {
    doc.write('<link type="text/css" rel="stylesheet" href="' +
$(this).attr("href") + '" >');
});
    doc.write('<div class="' + $(ele).attr("class") + '">' + $(ele).html() + '</div>');
    doc.close();
    var frameWindow = iframe.contentWindow;
    frameWindow.close();
    frameWindow.focus();
    frameWindow.print();
 
}

function ie(obj) {
    var ele = obj;
    var printCss = '';
    $(document).find("link").filter(function () {
        return $(this).attr("rel").toLowerCase() == "stylesheet";
    }).each(
function () {
    printCss = printCss + '<link type="text/css" rel="stylesheet" href="' + $(this).attr("href") + '" >';
});

    var printContent = '<div class="' + $(ele).attr("class") + '">' + $(ele).html() + '</div>';
    var windowUrl = 'about:blank';
    var uniqueName = new Date();
    var windowName = 'Print' + uniqueName.getTime();

    var printWindow = window.open(windowUrl, windowName, 'left=50000,top=50000,width=0,height=0');
    var BodyHtml = '<body>';
    var BodyEnd = "</body>";
    printWindow.document.write(printCss + BodyHtml + printContent + BodyEnd);
    printWindow.document.close();
    printWindow.focus();
    printWindow.print();
    printWindow.close();
}
//元素调用
          //  var d = [{ "elementes": $(".main"), "removebtn": true }]
          //
            //PrintAreaGroup(d, "elementes");
           //页面调用
            //PrintAreaGroup("Default2.aspx", "page");
            //HTML调用
           // PrintAreaGroup("<div>ddddddddd<div>", "html");
function PrintAreaGroup(printobj, type) {

    if (printobj != null) {
        switch (type) {
            case "page": //打印指定页面
                window.showModalDialog(printobj, new Object(), "dialogWidth=" + window.screen.availWidth
+ "px;dialogHeight=" + window.screen.availHeight + "px");

                break;
            case "elementes":
                var htmls = $("<div></div>");           
                $.each(printobj, function (name, object) {

                    //对象集合
                    if ((object.elementes).length > 1) {
                        $.each((object.elementes), function (ix, obj) {
                            var $obj = (object.elementes).eq(ix).clone();

                            if (object.removebtn == true) {
                                //判断是否要移除button
                                $obj.find(".button_bar").remove();


                            }

                            $obj.appendTo(htmls);


                        });
                    }
                    //单个对象
                    else {
                        var $obj = (object.elementes).clone();
                        if (object.removebtn == true) {
                            //判断是否要移除button
                            $obj.find(".button_bar").remove();
                        }

                        $obj.appendTo(htmls);

                    }

                });

                htmls.printArea();

                break;
            case "html": //打印指定HTML
                $("<div></div>").html(printobj).printArea();
                break;
        }

    }
}


var HKEY_Root, HKEY_Path, HKEY_Key;
HKEY_Root = "HKEY_CURRENT_USER";
HKEY_Path = "\\Software\\Microsoft\\Internet Explorer\\PageSetup\\";
//设置网页打印的页眉页脚为空 
function PageSetup_Null() {
    try {
        var Wsh = new ActiveXObject("WScript.Shell");
        HKEY_Key = "header";
        Wsh.RegWrite(HKEY_Root + HKEY_Path + HKEY_Key, "");
        HKEY_Key = "footer";
        Wsh.RegWrite(HKEY_Root + HKEY_Path + HKEY_Key, "");
    }
    catch (e) {

    }

}

////设置网页打印的页眉页脚为默认值 
//function PageSetup_Default() {
//    try {
//        var Wsh = new ActiveXObject("WScript.Shell");
//        HKEY_Key = "header";
//        Wsh.RegWrite(HKEY_Root + HKEY_Path + HKEY_Key, "&w&b页码,&p/&P");
//        HKEY_Key = "footer";
//        Wsh.RegWrite(HKEY_Root + HKEY_Path + HKEY_Key, "&u&b&d");
//    }
//    catch (e)
//{ }

//}
PageSetup_Null();

js局部打印

/打印事件
            $('#btnPrint').click(function () {
                   preview(1);           
               // print($('#main').html());
            });
            //打印的方法
         function preview(oper) {
            if (oper < 10)
                {
                    bdhtml=window.document.body.innerHTML;//获取当前页的html代码
                    sprnstr="<!--startprint"+oper+"-->";//设置打印开始区域
                    eprnstr="<!--endprint"+oper+"-->";//设置打印结束区域
                    prnhtml=bdhtml.substring(bdhtml.indexOf(sprnstr)+18); //从开始代码向后取html


                    prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));//从结束代码向前取html
                    window.document.body.innerHTML=prnhtml;
                    window.print();
                    window.document.body.innerHTML=bdhtml;
                }
            else 
                {
                    window.print();
                }
            }


将页面内要打印的内容加入中间<!--startprint1-->XXXXX<!--endprint1-->
<a onclick=preview(1)>打印</a>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值