恼人的控件打印问题

    系统中使用了第三方的签章插件,该插件是activex的并且在页面加载后进行初始化,由于是指打印页面部分区域所以使用了jqprint,jqprint的机制是拷贝区域的内容到一个iframe中进行打印,但是有activex时第一个问题是插件区域显示红色的叉,经检查是因为页面运行后实际拷贝到新的iframe中的html是插件初始化后的结果,后使用拷贝前去除object代码再document.write的方式写入iframe的方式,同时在iframe中再次构建初始化代码的方式解决。

(function ($) {
    var opt;

    $.fn.jqprint = function (options) {
        opt = $.extend({}, $.fn.jqprint.defaults, options);

        var $element = (this instanceof jQuery) ? this : $(this);
        $(".printframe").each(function () {
            $(this).remove();
        });
        if (opt.operaSupport && $.browser.opera) {
            var tab = window.open("", "jqPrint-preview");
            tab.document.open();

            var doc = tab.document;
        } else {
            var $iframe = $("<iframe  class='printframe' />");
            if (!opt.debug) {
                $iframe.css({ position: "absolute", width: "0px", height: "0px", left: "-600px", top: "-600px" });
            }

            $iframe.appendTo("body");
            var doc = $iframe[0].contentWindow.document;
        }

        if (opt.importCSS) {
            if ($("link[media=print]").length > 0) {
                $("link[media=print]").each(function () {
                    doc.write("<link type='text/css' rel='stylesheet' href='" + $(this).attr("href") + "' media='print' />");
                });
            } else {
                $("link").each(function () {
                    doc.write("<link type='text/css' rel='stylesheet' href='" + $(this).attr("href") + "' />");
                });
            }
        }
        if (opt.importJS) {
            $("script").each(function () {
                if ($(this).attr("import")) {
                    //    doc.write("<script type='text/javascript' src='"+$(this).attr("src")+"'></script>");
                    var script = doc.createElement("script");
                    script.src = $(this).attr("src");
                    var head = doc.getElementsByTagName("head")[0];
                    (head || doc.body).appendChild(script);
                }
            });
        }
        if (opt.printContainer) {
            $element.find("object").each(function() {
            $(this).remove();
        });
            $element.each(function () { doc.write($(this).html()); });
        }
        if (opt.removeObj) {
            $("iframe").each(function () {
                $(this).contents().find("object").each(function () {
                    $(this).remove();
                });
            }
            );
        }
        if (opt.docid != '') {
            doc.write("<object style='DISPLAY: none' id='" + opt.docid + "' classid='clsid:D85C89BE-263C-472D-9B6B-5264CD85B36E'><PARAM NAME='DoubleBuffered' VALUE='0'><PARAM NAME='Enabled' VALUE='-1'><PARAM NAME='Visible' VALUE='-1'><PARAM NAME='Cursor' VALUE='0'><PARAM NAME='HelpType' VALUE='1'><PARAM NAME='HelpKeyword' VALUE=''><PARAM NAME='ServiceUrl' VALUE='" + opt.url + "'><PARAM NAME='UserName' VALUE=''><PARAM NAME='ExtParam' VALUE=''><PARAM NAME='FieldsList' VALUE=''><PARAM NAME='AutoSave' VALUE='-1'><PARAM NAME='SaveHistory' VALUE='0'><PARAM NAME='WebCancelOrder' VALUE='0'><PARAM NAME='WebIsProtect' VALUE='1'><PARAM NAME='WebAutoSign' VALUE='0'><PARAM NAME='FieldsXml' VALUE=''><PARAM NAME='CharSetName' VALUE='GBC_'><PARAM NAME='WebUrl' VALUE=''><PARAM NAME='EnableMove' VALUE='-1'><PARAM NAME='ShowHint' VALUE='-1'><PARAM NAME='PassWord' VALUE=''><PARAM NAME='DocumentList' VALUE=''><PARAM NAME='TimerTime' VALUE=''><PARAM NAME='SaveImage' VALUE=''><PARAM NAME='Visiabled' VALUE=''><PARAM NAME='ShowSignatureWindow' VALUE=''><PARAM NAME='ErrorInfo' VALUE=''><PARAM NAME='ExtParam1' VALUE=''><PARAM NAME='HandPenWidth' VALUE='0'><PARAM NAME='HandPenColor' VALUE='255'><PARAM NAME='ProtectType' VALUE=''><PARAM NAME='RelativeTagId' VALUE=''><PARAM NAME='PositionByTagType' VALUE='0'><PARAM NAME='PositionBySignType' VALUE='0'><PARAM NAME='EventResult' VALUE='0'><PARAM NAME='Phrase' VALUE=''><PARAM NAME='ValidateCertTime' VALUE='0'><PARAM NAME='ValidateCertificate' VALUE='0'><PARAM NAME='PrintControlType' VALUE='2'><PARAM NAME='XMLEvent' VALUE='0'><PARAM NAME='MenuDocVerify' VALUE='-1'><PARAM NAME='MenuServerVerify' VALUE='-1'><PARAM NAME='MenuDigitalCert' VALUE='-1'><PARAM NAME='MenuDocLocked' VALUE='-1'><PARAM NAME='MenuDeleteSign' VALUE='-1'><PARAM NAME='MenuMoveSetting' VALUE='-1'><PARAM NAME='MenuAbout' VALUE='-1'><PARAM NAME='PrintWater' VALUE='-1'><PARAM NAME='DefaultSignTimeFormat' VALUE=''><PARAM NAME='HandEvent' VALUE='0'><PARAM NAME='EnableEditPrintCount' VALUE='-1'><PARAM NAME='AutoCloseBatchWindow' VALUE='0'><PARAM NAME='ShowBatchWindow' VALUE='-1'><PARAM NAME='ShowBatchErrorInfo' VALUE='-1'><PARAM NAME='MustSignature' VALUE='0'><PARAM NAME='SignCert' VALUE=''><PARAM NAME='XmlConfigParam' VALUE=''><PARAM NAME='SupportVerifyType' VALUE='0'><PARAM NAME='VerifyType' VALUE='0'><PARAM NAME='ModalPrintUrl' VALUE=''><PARAM NAME='ExtParam2' VALUE=''><PARAM NAME='DocumentName' VALUE=''></object>");
            doc.write("<script type='text/javascript'>");
            doc.write("var revision = document.getElementById('" + opt.docid + "');");
            doc.write("revision.ShowSignature('" + opt.docid + "');");
            doc.write("revision.MovePositionByNoSave(0, -15);");
            doc.write("</script>");
        }
        doc.close();
        setTimeout(function () {
            $iframe[0].contentWindow.focus();
            $iframe[0].contentWindow.print();
              window.location.replace(window.location.href);
            
        }, 500);
    };

    $.fn.jqprint.defaults = {
        debug: false,
        importCSS: true,
        importJS: true,
        removeObj: true,
        printContainer: true,
        operaSupport: true,
        docid: ''
    };

    // Thanks to 9__, found at http://users.livejournal.com/9__/380664.html
    jQuery.fn.outer = function () {
        return $($('<div></div>').html(this.clone())).html();
    };
})(jQuery);

  

posted @ 2012-05-06 15:00 sdhjl2000 阅读(...) 评论(...) 编辑 收藏