zoukankan      html  css  js  c++  java
  • js单独打印图片

    实现方案1

    https://web03.cn/blog/217

    通过打开新窗口的方式打印图片

    function printNewWindow(imgSrc) {
        let oWin = window.open('', 'pringwindow', 'menubar=no,location=no,resizable=yes,scrollbars=no,status=no,width=1000,height=660')
        oWin.document.fn = function() {
            if (oWin) {
                oWin.print()
                oWin.close()
            }
        }
        let html = '<div style="height: 100%; 100%;">' + `<img src="${imgSrc}" onload="fn()" style="max-height:100%;max- 100%;" />` + '</div>'
        oWin.document.open()
        oWin.document.write(html)
        oWin.document.close()
    }
    // printNewWindow('https://yuan30-1304488464.cos.ap-guangzhou.myqcloud.com/blog/images/67628ac324e240f8bf8d29232a87fde0.jpg')"
    

    实现方案2

    将img放入iframe,然后在当前窗口调用打印iframe

    function printThisWindow(imgSrc) {
        let iframe = document.createElement('IFRAME')
        let doc = null
        iframe.setAttribute('class', 'print-iframe')
        iframe.setAttribute('style', 'position:absolute;0px;height:0px;left:-500px;top:-500px;')
        document.body.appendChild(iframe)
        doc = iframe.contentWindow.document
        // 取一个不重复的方法名称,可以随机字符串
        doc.___imageLoad___ = function () {
            iframe.contentWindow.print()
            if (navigator.userAgent.indexOf('MSIE') > 0) {
                document.body.removeChild(iframe)
            }
        }
        doc.write('<div style="height: 100%; 100%;">' + `<img src="${imgSrc}" style="max-height:100%;max- 100%;" onload="___imageLoad___()"/>` + '</div>')
        doc.close()
        iframe.contentWindow.focus()
    }

    以上实现demo https://yuan30-1304488464.cos.ap-guangzhou.myqcloud.com/blog/demo/print-img.html

    对比

    两种方法都能完美的实现打印预览效果

    实现方案1 可以不影响当前窗口的任何结构,在新窗口进行打印操作

    但是对于一些浏览器,打开新窗口是多余的

    实现方案2 可以在当前窗口打开打印预览,这是很正常的操作

    但是在react项目中,对于layout动态路由组件,我是使用的【react-loadable】插件,遇到在当前窗口弹出打印预览时,动态路由会重新加载,并且页面会初始化(不是动态路由的话,是没问题的)(没有打印预览的浏览器也是没问题的)

    踩过这个坑,还有下一个坑等着你,这一路就是给自己填坑,坑填多了,也就习惯了,直到这一路平坦了,也就无怨无悔了。
  • 相关阅读:
    利用FlashPaper实现类似百度文库功能
    浅谈Oracle函数返回Table集合
    Oracle 触发器在日志管理开发中的应用
    Putty 工具 保存配置的 小技巧
    java.util.Date转java.sql.Date丢失时间问题
    java String和Date转换
    springboot项目使用拦截器修改/添加前端传输到后台header和cookie参数
    Spring的使用及Spring3.2控制器增强@ControllerAdvice
    使用fastjson统一序列化响应格式
    【转】Elastic-Job
  • 原文地址:https://www.cnblogs.com/xiaofeilin/p/14790157.html
Copyright © 2011-2022 走看看