js实现浏览器的打印功能——路径打印

简介: js实现浏览器的打印功能——路径打印

或多或少在前端页面开发的过程中会遇到一些网页需要这样的功能——打印页面,没错,就是页面打印,那个window.print的功能,但是怎么才能写一个又好用又不会有太多问题和性能的打印用能的,那个他来了(引用了element-ui的消息提示组件$message做消息提示)

printReport () {
      if (!this.reportUrl) { // 用来判断打印的地址是否存在,你们随意,我的是业务需要
        this.$message.error('等待报告加载完成,请稍后重试')
      }
      this.$message.warning('正在唤起打印服务请稍等'); // 自己的提示语,你们随便
      if (this.reportStart) return;
      this.reportStart = true;
      var iframe = window.document.createElement('iframe');
      try {
        iframe.id = 'print_iframe';
        iframe.style = "position: absolute;top: 0;left: 0;z-index:-1;display:none";
        document.body.appendChild(iframe);
        let ifr = window.frames["print_iframe"].contentDocument;
        let ifrImage = window.document.createElement('img');
        ifrImage.src = this.reportUrl;
        ifr.body.style = "margin:0px"
        ifr.body.append(ifrImage);
        let ifrImageObj = new Image();
        ifrImageObj.src = this.reportUrl;
        ifrImageObj.onload = () => {
          window.frames["print_iframe"].contentWindow.print();
          document.body.removeChild(window.frames["print_iframe"]);  //打印之后记得移除dom,避免内存溢出
          this.reportStart = false;
        }
      } catch (error) {
        iframe.setAttribute("id", "print_iframe");
        iframe.setAttribute("style", "position: absolute;top: 0;left: 0;z-index:9999;display:none");
        window.document.body.appendChild(iframe);
        let ifr = window.frames["print_iframe"].contentWindow || window.frames["print_iframe"];
        let ifrImage = window.document.createElement('img');
        ifrImage.src = this.reportUrl;
        ifr.document.body.setAttribute("style", "margin:0px;size: portrait;");
        ifr.document.body.appendChild(ifrImage);
        let ifrImageObj = new Image();
        ifrImageObj.src = this.reportUrl;
        ifrImageObj.onload = () => {
          ifr.window.focus();
          ifr.window.print();
          window.document.body.removeChild(document.getElementById('print_iframe'));
          this.reportStart = false;
        }
      }
    }
结束语:关注我,少走弯路!

image.png

相关文章
|
5天前
|
JavaScript 前端开发
【Vue.js】监听器功能(EventListener)的实际应用【合集】
而此次问题的核心就在于,Vue实例化的时机过早,在其所依赖的DOM结构尚未完整构建完成时就已启动挂载流程,从而导致无法找到对应的DOM元素,最终致使计算器功能出现异常,输出框错误地显示“{{current}}”,并且按钮的交互功能也完全丧失响应。为了让代码结构更为清晰,便于后续的维护与管理工作,我打算把HTML文件中标签内的JavaScript代码迁移到外部的JS文件里,随后在HTML文件中对其进行引用。
23 8
|
24天前
|
JavaScript 容器
带方向感知功能的js图片遮罩层插件
带方向感知功能的js图片遮罩层插件
|
2月前
|
移动开发 JavaScript 前端开发
一些处理浏览器兼容性问题的JavaScript库
这些库在处理浏览器兼容性问题方面都有着各自的特点和优势,可以根据具体的需求和项目情况选择合适的库来使用,从而提高代码的兼容性和稳定性,为用户提供更好的体验。同时,随着浏览器技术的不断发展,还需要持续关注和学习新的兼容性解决方案。
116 48
|
2月前
|
JSON 移动开发 JavaScript
在浏览器执行js脚本的两种方式
【10月更文挑战第20天】本文介绍了在浏览器中执行HTTP请求的两种方式:`fetch`和`XMLHttpRequest`。`fetch`支持GET和POST请求,返回Promise对象,可以方便地处理异步操作。`XMLHttpRequest`则通过回调函数处理请求结果,适用于需要兼容旧浏览器的场景。文中还提供了具体的代码示例。
在浏览器执行js脚本的两种方式
|
2月前
|
JavaScript 前端开发 容器
jQuery多功能滑块插件r-slider.js
r-slider.js是一款jQuery多功能滑块插件。使用该插件,可以制作出滑块、开关按钮、进度条、向导步骤等多种效果。
47 5
|
2月前
|
JavaScript 前端开发 数据处理
模板字符串和普通字符串在浏览器和 Node.js 中的性能表现是否一致?
综上所述,模板字符串和普通字符串在浏览器和 Node.js 中的性能表现既有相似之处,也有不同之处。在实际应用中,需要根据具体的场景和性能需求来选择使用哪种字符串处理方式,以达到最佳的性能和开发效率。
|
2月前
|
算法 开发者
Moment.js库是如何处理不同浏览器的时间戳格式差异的?
总的来说,Moment.js 通过一系列的技术手段和策略,有效地处理了不同浏览器的时间戳格式差异,为开发者提供了一个稳定、可靠且易于使用的时间处理工具。
57 1
|
2月前
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
397 9
|
2月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
247 1
|
2月前
|
JavaScript
js实现简洁实用的网页计算器功能源码
这是一款使用js实现简洁实用的网页计算器功能源码。可实现比较基本的加减乘除四则运算功能,界面简洁实用,是一款比较基本的js运算功能源码。该源码可兼容目前最新的各类主流浏览器。
35 2