Blob格式的PDF文件调用打印,浏览器文件打印(兼容)

浏览器文件打印,解决:非整个浏览器页面打印,指定模块儿打印

要调用 iframe 中加载的 PDF 文件的打印功能,可以直接操作 iframe 的 contentWindow 对象,调用其内置的打印方法(PDF 浏览器插件或 PDF.js 渲染器通常会暴露 print() 方法)。以下是具体实现方式:

实现思路

  1. 确保 iframe 已完全加载 PDF(监听 load 事件)。

  2. 通过 iframe 的 contentWindow 调用 PDF 的打印方法(不同浏览器可能有差异,需兼容处理)。

  3. 若直接调用失败,降级使用 window.print() 打印整个 iframe 内容。

    <el-button size="small" type="primary" @click="printPdf()">打印</el-button>

fileUrl 文件地址; @load="handleIframeLoad" 判断pdf文件是否加载完成。

javascript 复制代码
// 监听 iframe 加载完成
    handleIframeLoad() {
      this.isIframeLoaded = true;
      console.log('PDF 加载完成,可打印');
    },

    // 打印 iframe 中的 PDF
    printPdf() {
      if (!this.isIframeLoaded) {
        alert('PDF 尚未加载完成,请稍后再试');
        return;
      }

      const iframe = this.$refs.pdfIframe;
      const iframeWindow = iframe.contentWindow;

      try {
        // 方案1:直接调用 PDF 内置的打印方法(主流浏览器对 PDF 支持较好)
        if (iframeWindow.print) {
          // 部分浏览器中,PDF 的 print() 是异步的,需包裹在 setTimeout 中
          setTimeout(() => {
            iframeWindow.print();
          }, 100);
        } else {
          // 方案2:降级使用 window.print() 打印整个 iframe 区域
          this.printIframeWithWindowPrint(iframe);
        }
      } catch (error) {
        console.error('打印失败,使用降级方案', error);
        this.printIframeWithWindowPrint(iframe);
      }
    },

    // 降级方案:使用 window.print() 并指定只打印 iframe 内容
    printIframeWithWindowPrint(iframe) {
      // 保存当前页面的打印样式
      const originalStyle = document.body.style;

      // 隐藏页面其他内容,只显示 iframe
      document.body.style.visibility = 'hidden';
      iframe.style.visibility = 'visible';
      iframe.style.position = 'fixed';
      iframe.style.top = '0';
      iframe.style.left = '0';
      iframe.style.width = '100%';
      iframe.style.height = '100%';

      // 触发打印
      window.print();

      // 恢复页面样式(打印完成后执行)
      setTimeout(() => {
        document.body.style = originalStyle;
        iframe.style = ''; // 恢复 iframe 原有样式
      }, 100);
    },
相关推荐
weixin_4896900218 小时前
MicroSIP自定义web拨打协议
服务器·前端·windows
2401_8614121418 小时前
python 从入门到精通 高清PDF 背记手册
开发语言·python·pdf
今天也不想动18 小时前
PaddleOCR实现批量pdf文件或图像的文本识别
pdf·文本识别
幻云201018 小时前
Python机器学习:筑基与实践
前端·人工智能·python
web小白成长日记18 小时前
Vue3中如何优雅实现支持多绑定变量和修饰符的双向绑定组件?姜姜好
前端·javascript·vue.js
晴天飛 雪18 小时前
Spring Boot 接口耗时统计
前端·windows·spring boot
0思必得018 小时前
[Web自动化] Selenium模拟用户的常见操作
前端·python·selenium·自动化
十六年开源服务商18 小时前
WordPress在线聊天系统推荐
大数据·javascript·html
Apifox.18 小时前
测试用例越堆越多?用 Apifox 测试套件让自动化回归更易维护
运维·前端·后端·测试工具·单元测试·自动化·测试用例
开开心心_Every19 小时前
视频无损压缩工具:大幅减小体积并保持画质
游戏·微信·pdf·excel·音视频·语音识别·tornado