zoukankan      html  css  js  c++  java
  • 打印插件

    http://www.jq22.com/jquery-info12837

    jQuery.print.js

    /* @license 
     * jQuery.print, version 1.3.2
     *  (c) Sathvik Ponangi, Doers' Guild
     * Licence: CC-By (http://creativecommons.org/licenses/by/3.0/)
     *--------------------------------------------------------------------------*/
    (function ($) {
        "use strict";
        // A nice closure for our definitions
        function getjQueryObject(string) {
            // Make string a vaild jQuery thing
            var jqObj = $("");
            try {
                jqObj = $(string)
                    .clone();
            } catch (e) {
                jqObj = $("<span />")
                    .html(string);
            }
            return jqObj;
        }
    
        function printFrame(frameWindow) {
            // Print the selected window/iframe
            var def = $.Deferred();
            try {
                setTimeout(function () {
                    // Fix for IE : Allow it to render the iframe
                    frameWindow.focus();
                    try {
                        // Fix for IE11 - printng the whole page instead of the iframe content
                        if (!frameWindow.document.execCommand('print', false, null)) {
                            // document.execCommand returns false if it failed -http://stackoverflow.com/a/21336448/937891
                            frameWindow.print();
                        }
                    } catch (e) {
                        frameWindow.print();
                    }
                    frameWindow.close();
                    def.resolve();
                }, 250);
            } catch (err) {
                def.reject(err);
            }
            return def;
        }
    
        function printContentInNewWindow(content) {
            // Open a new window and print selected content
            var w = window.open();
            w.document.write(content);
            w.document.close();
            return printFrame(w);
        }
    
        function isNode(o) {
            /* http://stackoverflow.com/a/384380/937891 */
            return !!(typeof Node === "object" ? o instanceof Node : o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName === "string");
        }
        $.print = $.fn.print = function () {
            // Print a given set of elements
            var options, $this, self = this;
            // console.log("Printing", this, arguments);
            if (self instanceof $) {
                // Get the node if it is a jQuery object
                self = self.get(0);
            }
            if (isNode(self)) {
                // If `this` is a HTML element, i.e. for
                // $(selector).print()
                $this = $(self);
                if (arguments.length > 0) {
                    options = arguments[0];
                }
            } else {
                if (arguments.length > 0) {
                    // $.print(selector,options)
                    $this = $(arguments[0]);
                    if (isNode($this[0])) {
                        if (arguments.length > 1) {
                            options = arguments[1];
                        }
                    } else {
                        // $.print(options)
                        options = arguments[0];
                        $this = $("html");
                    }
                } else {
                    // $.print()
                    $this = $("html");
                }
            }
            // Default options
            var defaults = {
                globalStyles: true,
                mediaPrint: false,
                stylesheet: null,
                noPrintSelector: ".no-print",
                iframe: true,
                append: null,
                prepend: null,
                manuallyCopyFormValues: true,
                deferred: $.Deferred()
            };
            // Merge with user-options
            options = $.extend({}, defaults, (options || {}));
            var $styles = $("");
            if (options.globalStyles) {
                // Apply the stlyes from the current sheet to the printed page
                $styles = $("style, link, meta, title");
            } else if (options.mediaPrint) {
                // Apply the media-print stylesheet
                $styles = $("link[media=print]");
            }
            if (options.stylesheet) {
                // Add a custom stylesheet if given
                $styles = $.merge($styles, $('<link rel="stylesheet" href="' + options.stylesheet + '">'));
            }
            // Create a copy of the element to print
            var copy = $this.clone();
            // Wrap it in a span to get the HTML markup string
            copy = $("<span/>")
                .append(copy);
            // Remove unwanted elements
            copy.find(options.noPrintSelector)
                .remove();
            // Add in the styles
            copy.append($styles.clone());
            // Appedned content
            copy.append(getjQueryObject(options.append));
            // Prepended content
            copy.prepend(getjQueryObject(options.prepend));
            if (options.manuallyCopyFormValues) {
                // Manually copy form values into the HTML for printing user-modified input fields
                // http://stackoverflow.com/a/26707753
                copy.find("input")
                    .each(function () {
                        var $field = $(this);
                        if ($field.is("[type='radio']") || $field.is("[type='checkbox']")) {
                            if ($field.prop("checked")) {
                                $field.attr("checked", "checked");
                            }
                        } else {
                            $field.attr("value", $field.val());
                        }
                    });
                copy.find("select").each(function () {
                    var $field = $(this);
                    $field.find(":selected").attr("selected", "selected");
                });
                copy.find("textarea").each(function () {
                    // Fix for https://github.com/DoersGuild/jQuery.print/issues/18#issuecomment-96451589
                    var $field = $(this);
                    $field.text($field.val());
                });
            }
            // Get the HTML markup string
            var content = copy.html();
            // Notify with generated markup & cloned elements - useful for logging, etc
            try {
                options.deferred.notify('generated_markup', content, copy);
            } catch (err) {
                console.warn('Error notifying deferred', err);
            }
            // Destroy the copy
            copy.remove();
            if (options.iframe) {
                // Use an iframe for printing
                try {
                    var $iframe = $(options.iframe + "");
                    var iframeCount = $iframe.length;
                    if (iframeCount === 0) {
                        // Create a new iFrame if none is given
                        $iframe = $('<iframe height="0" width="0" border="0" wmode="Opaque"/>')
                            .prependTo('body')
                            .css({
                                "position": "absolute",
                                "top": -999,
                                "left": -999
                            });
                    }
                    var w, wdoc;
                    w = $iframe.get(0);
                    w = w.contentWindow || w.contentDocument || w;
                    wdoc = w.document || w.contentDocument || w;
                    wdoc.open();
                    wdoc.write(content);
                    wdoc.close();
                    printFrame(w)
                        .done(function () {
                            // Success
                            setTimeout(function () {
                                // Wait for IE
                                if (iframeCount === 0) {
                                    // Destroy the iframe if created here
                                    $iframe.remove();
                                }
                            }, 100);
                        })
                        .fail(function (err) {
                            // Use the pop-up method if iframe fails for some reason
                            console.error("Failed to print from iframe", err);
                            printContentInNewWindow(content);
                        })
                        .always(function () {
                            try {
                                options.deferred.resolve();
                            } catch (err) {
                                console.warn('Error notifying deferred', err);
                            }
                        });
                } catch (e) {
                    // Use the pop-up method if iframe fails for some reason
                    console.error("Failed to print from iframe", e.stack, e.message);
                    printContentInNewWindow(content)
                        .always(function () {
                            try {
                                options.deferred.resolve();
                            } catch (err) {
                                console.warn('Error notifying deferred', err);
                            }
                        });
                }
            } else {
                // Use a new window for printing
                printContentInNewWindow(content)
                    .always(function () {
                        try {
                            options.deferred.resolve();
                        } catch (err) {
                            console.warn('Error notifying deferred', err);
                        }
                    });
            }
            return this;
        };
    })(jQuery);
    View Code

    使用方法:

    引用文件:

    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script type="text/javascript" src="js/jquery.print.js"></script>     
     
     
    打印内容:

    $("#myElementId").print(/*options*/);

    或者

    $.print("#myElementId"/*, options*/);

    配置参数:

    $("#myElementId").print({
        globalStyles: true,
        mediaPrint: false,
        stylesheet: null,
        noPrintSelector: ".no-print",
        iframe: true,
        append: null,
        prepend: null,
        manuallyCopyFormValues: true,
        deferred: $.Deferred()
    });        
     
     
    参数说明:
     
    参数 默认值 接收值 描述
    globalStyles true Boolean 是否包含父文档的样式
    mediaPrint false Boolean 是否包含media='print'的链接标签。会被globalStyles选项覆盖
    stylesheet null URL-string 外部样式表的URL地址
    noPrintSelector ".no-print" 任何可用的jQuery选择器 不想打印的元素的jQuery选择器
    iframe 默认true,如果没有iframe选择器被传入会创建一个隐藏的iframe 任何可用的jQuery选择器或Boolean 是否使用一个iframe来替代打印表单的弹出窗口
    append/prepend null Boolean 是否将用户更新的表单输入框内容作为打印内容(通过迭代每一个表单元素来实现)
    deferred $.Deferred() 任何可用的jQuery.Deferred对象 当打印函数被调用时的jQuery.Deferred对象

    使用方法

    另一个打印插件

    http://www.jq22.com/jquery-info347

  • 相关阅读:
    jvm基本结构和解析
    多态的意思
    java中对象的简单解读
    double类型和int类型的区别
    python 解析xml文件
    win10不能映射Ubuntu共享文件
    Qt程序打包
    Ubuntu boot分区文件误删,系统无法启动,怎么解
    ubuntu Boot空间不够问题“The volume boot has only 5.1MB disk space remaining”
    Ubuntu 分辨率更改 xrandr Failed to get size of gamma for output default
  • 原文地址:https://www.cnblogs.com/zyx321/p/6639807.html
Copyright © 2011-2022 走看看